在pandas 0.23.0和python 3.6.5中,我看到在DataFrame上使用arg
时无法理解的行为。
如果DataFrame仅具有一列,并且该列的类型为'category',则iloc[int]
返回标量值,而不是Series。
当“答案”列是对象dtype时,我将按预期得到iloc[int]
:
Series
但是,当我将列更改为类别dtype时,我突然得到>>> df = pandas.DataFrame({'answer': ['no', 'no', 'yes']})
>>> df['answer'] = df['answer'].astype('object')
>>> df.iloc[0]
answer no
Name: 0, dtype: object
>>> type(df.iloc[0])
<class 'pandas.core.series.Series'>
??
str
请注意,即使一个数据框包含多个列,我也不再从其获取标量值,即使它们都是类别:
>>> df = pandas.DataFrame({'answer': ['no', 'no', 'yes']})
>>> df['answer'] = df['answer'].astype('category')
>>> df.iloc[0]
'no'
>>> type(df.iloc[0])
<class 'str'>
这是预期的行为吗?如果是这样,无论列类型如何,如何强制>>> df = pandas.DataFrame({'answer': ['no', 'no', 'yes'], 'name': ['steve', 'john', 'sally']})
>>> df['answer'] = df['answer'].astype('category')
>>> df['name'] = df['name'].astype('category')
>>> df.iloc[0]
answer no
name steve
Name: 0, dtype: object
>>> type(df.iloc[0])
<class 'pandas.core.series.Series'>
返回iloc[int]
?
答案 0 :(得分:1)
在仔细阅读了文档之后,看起来这种行为是预期的:
从分类数据中返回单个项目也将返回该值,而不是长度为“ 1”的分类。
要获取类型为类别的单个值系列,请传入具有单个值的列表
所以最终通过iloc[[0], 0]
起作用了:
>>> pandas.DataFrame({'answer': ['no', 'no', 'yes']}, dtype='category').iloc[[0], 0]
0 no
Name: answer, dtype: category
Categories (2, object): [no, yes]
>>> type(pandas.DataFrame({'answer': ['no', 'no', 'yes']}, dtype='category').iloc[[0], 0])
<class 'pandas.core.series.Series'>
对我来说很奇怪,但至少有记载。
https://pandas.pydata.org/pandas-docs/stable/categorical.html#getting