2017-06-01 68 views
2

我有一个非常简单的数据帧像这样:熊猫自动转换行

In [8]: df 
Out[8]: 
    A B C 
0 2 a a 
1 3 s 3 
2 4 c ! 
3 1 f 1 

我的目标是提取第一排,看起来像这样的方式:

A B C 
0 2 a a 

由于您可以看到数据帧形状(1x3)被保留,第一行仍然有3列。

然而,当我键入以下命令df.loc[0]输出结果是这样的:

df.loc[0] 
Out[9]: 
A 2 
B a 
C a 
Name: 0, dtype: object 

正如你看到的,行变成了列3行! (3x1而不是3x1)。这怎么可能?我如何简单地提取该行并保持其目标中描述的形状?你能提供一个聪明和优雅的方式来做到这一点?

我试图用转置命令.T但没有成功......我知道我可以创建其中列由原始数据帧中提取另一个数据框,但这种方式很繁琐,不优雅,我会说(pd.DataFrame({'A':[2], 'B':'a', 'C':'a'}))。

下面是数据框,如果你需要它:

import pandas as pd 
df = pd.DataFrame({'A':[2,3,4,1], 'B':['a','s','c','f'], 'C':['a', 3, '!', 1]}) 

回答

3

您需要添加[]DataFrame

#select by index value 
print (df.loc[[0]]) 
    A B C 
0 2 a a 

或者:

print (df.iloc[[0]]) 
    A B C 
0 2 a a 

如果需要调换Series,首先需要将它转换为DataFrameto_frame

print (df.loc[0].to_frame()) 
    0 
A 2 
B a 
C a 

print (df.loc[0].to_frame().T) 
    A B C 
0 2 a a 
+0

好吧,我看到这是最好的方式...但是我仍然漫步为什么.T不工作...这是一个错误? –

+0

不,但首先需要通过'to_frame'将'DataFrame'转换为'DataFrame',然后就可以转置,因为'Series'不能转置 – jezrael

+0

哦,好的完美,现在变得更有意义了!非常感谢! –

1

使用范围选择器将保留Dataframe格式。

df.iloc[0:1] 
Out[221]: 
    A B C 
0 2 a a