出于编程目的,我希望.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默认始终返回数据帧。
答案 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