[英]How can I transform a series object (generated with iloc) into a single-row dataframe?
[英]Forcing pandas .iloc to return a single-row dataframe?
出于编程目的,我希望.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 来完成,默认情况下它总是返回一个数据帧。
使用双括号,
df.iloc[[0]]
输出:
a b
0 1 3
print(type(df.iloc[[0]])
<class 'pandas.core.frame.DataFrame'>
df.iloc[[0],:]
的缩写
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
类似的语法。
双括号方法并不总是适合我(例如,当我使用条件选择带有 loc 的时间戳行时)。
但是,您可以将to_frame()
添加到您的操作中。
>>> df = pd.DataFrame({'a':[1,2], 'b':[3,4]})
>>> df2 = df.iloc[0, :].to_frame().transpose()
>>> type(df2)
<class 'pandas.core.frame.DataFrame'>
请使用以下选项:
df1 = df.iloc[[0],:]
#type(df1)
df1
或者
df1 = df.iloc[0:1,:]
#type(df1)
df1
要从 Dataframe 中提取单行,请使用:
df_name.iloc[index,:].to_frame().transpose()
single_Sample1=df.iloc[7:10]
single_Sample1
[1]: https ://i.stack.imgur.com/RHHDZ.png**强文本**
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.