强制pandas .iloc返回单行数据帧?

时间:2017-08-31 20:59:54

标签: python pandas dataframe indexing

出于编程目的,我希望.iloc始终返回数据帧,即使结果数据帧只有一行。如何做到这一点?

目前,当结果只有一行时,.iloc会返回一个系列。例如:

In [1]: df = pd.DataFrame({'a':[1,2], 'b':[3,4]})

In [2]: df
Out[2]:
   a  b
0  1  3
1  2  4

In [3]: type(df.iloc[0, :])
Out[3]: pandas.core.series.Series

这种行为很糟糕有两个原因:

  • 根据所选行的数量,.iloc可以返回系列或数据框,强制我在我的代码中手动检查
另一方面,

- .loc总是返回一个数据框,使pandas内部不一致(错误的信息,如评论中所指出的)

对于R用户,可以使用drop = FALSE或使用tidyverse的tibble完成此操作,tidble默认始终返回数据帧。

5 个答案:

答案 0 :(得分:27)

使用双括号

df.iloc[[0]]

输出:

   a  b
0  1  3

print(type(df.iloc[[0]])

<class 'pandas.core.frame.DataFrame'>

df.iloc[[0],:]

的缩写

答案 1 :(得分:3)

指定行索引的切片。

df.iloc[0:1]

它返回单行数据帧。

   a  b
0  1  3

答案 2 :(得分:1)

双括号方法并不总是对我有用(例如,当我使用条件条件选择带有loc的带时间戳的行时)。

但是,您可以将to_frame()添加到您的操作中。

>>> df = pd.DataFrame({'a':[1,2], 'b':[3,4]})

>>> df2 = df.iloc[0, :].to_frame()

>>> type(df2)
<class 'pandas.core.frame.DataFrame'>

答案 3 :(得分:0)

请使用以下选项:

df1 = df.iloc[[0],:]
#type(df1)
df1

df1 = df.iloc[0:1,:]
#type(df1)
df1

答案 4 :(得分:0)

single_Sample1=df.iloc[7:10]
single_Sample1

[1]:https://i.stack.imgur.com/RHHDZ.png**strong 文本**