Pandas自动将行转换为列

9

我有一个非常简单的数据框,如下所示:

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)被保留,第一行仍然有三列。

但是,当我输入以下命令df.loc[0]时,输出结果如下:

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

如您所见,该行已经变成了一个有3行的列!(3x1而不是3x1)。这是怎么可能的?我如何才能简单地提取出行并保持其描述目标的形状?您能否提供一种聪明而优雅的方法来实现呢?
我尝试使用转置命令.T,但没有成功……我知道我可以创建另一个数据框,其中的列是由原始数据框中提取出来的,但我认为这种方式相当繁琐且不优雅。
如果您需要,以下是数据框:
import pandas as pd
df = pd.DataFrame({'A':[2,3,4,1], 'B':['a','s','c','f'], 'C':['a', 3, '!', 1]})
2个回答

11

您需要为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,首先需要通过to_frame将其转换为DataFrame
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

好的,我明白这是最好的方法...但我仍然想知道为什么.T不起作用...这是一个错误吗? - Federico Gentile
不行,但需要先通过 to_frame 转换为 DataFrame,然后才能进行转置,因为 Series 不能被转置。 - jezrael
很高兴能帮忙!祝你有美好的一天! - jezrael
1
此外,通过使用 df.loc[[0]],您可以保留列之间可能不同的数据类型。df.loc[0] 会自动将行转换为系列,并将可能不同的数据类型转换为通用数据类型。 - piRSquared

2
使用范围选择器将保留Dataframe格式。
df.iloc[0:1]
Out[221]: 
   A  B  C
0  2  a  a

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接