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

Posted

技术标签:

【中文标题】强制 pandas .iloc 返回单行数据框?【英文标题】:Forcing pandas .iloc to return a single-row dataframe? 【发布时间】:2018-02-09 21:56:53 【问题描述】:

出于编程目的,我希望.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,它默认总是返回一个数据框。

【问题讨论】:

.loc 总是返回pd.DataFrame,确实,尝试df.loc[0,:],你会得到相同的行为。 @juanpa.arrivillaga 你是对的——我会从我的帖子中编辑错误的信息。 【参考方案1】:
single_Sample1=df.iloc[7:10]
single_Sample1

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

【讨论】:

【参考方案2】:

双括号方法并不总是适合我(例如,当我使用条件选择带有 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】:

按标签访问行:loc

# Setup
df = pd.DataFrame('X': [1, 2, 3], 'Y':[4, 5, 6], index=['a', 'b', 'c'])
df        

   X  Y
a  1  4
b  2  5
c  3  6

要获取 DataFrame 而不是 Series,请传递长度为 1 的索引列表,

df.loc[['a']]
# Same as
df.loc[['a'], :] # selects all columns

   X  Y
a  1  4

要选择多个特定行,请使用

df.loc[['a', 'c']] 

   X  Y
a  1  4
c  3  6

要选择连续范围的行,请使用

df.loc['b':'c'] 

   X  Y
b  2  5
c  3  6

按位置访问行:iloc

指定长度为 1 的索引列表,

i = 1
df.iloc[[i]]

   X  Y
b  2  5

或者,指定长度为 1 的切片:

df.iloc[i:i+1] 

   X  Y
b  2  5

要选择多行或连续切片,您可以使用与loc 类似的语法。

【讨论】:

【参考方案4】:

请使用以下选项:

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

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

【讨论】:

【参考方案5】:

使用双括号,

df.iloc[[0]]

输出:

   a  b
0  1  3

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

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

df.iloc[[0],:]的缩写

【讨论】:

请注意,它也适用于df.loc[[0], :]!我来这里是为了希望并找到了金子。谢谢 多么优雅的解决方案! 大声笑,我已经使用 pandas 很长时间了,我现在才意识到这一点。我只是用来调用to_frame 然后转帧。

以上是关于强制 pandas .iloc 返回单行数据框?的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用iloc函数基于dataframe数据行(row)的索引抽取单行或者多行数据其中多行索引需要嵌入在列表方括号[]中或使用:符号形成起始和终止范围索引

将 pandas 中的单行输出到数组

pandas tolist() 如何返回不同的数据类型?

python pandas.DataFrame选取修改数据最好用.loc,.iloc,.ix

pandas的DataFrame对象抽取“整列”或者“整行”数据

熊猫:链式作业[重复]