如果我的pandas.DataFrame
包含不同类型的列(例如int64
和float64
),请使用int
从.loc
列中获取单个元素索引将输出转换为float
:
import pandas as pd
df_test = pd.DataFrame({'ints':[1,2,3], 'floats': [4.5,5.5,6.5]})
df_test['ints'].dtype
>>> dtype('int64')
df_test.loc[0,'ints']
>>> 1.0
type(df_test.loc[0,'ints'])
>>> numpy.float64
如果我使用.at
进行索引,则不会发生:
type(df_test.at[0,'ints'])
>>> numpy.int64
当所有列都为int
时,它也不会发生:
df_test = pd.DataFrame({'ints':[1,2,3], 'ints2': [4,5,6]})
df_test.loc[0,'ints']
>>> 1
这是pandas
索引的某些核心属性的结果吗?换句话说,它是一个功能的错误吗? :)
更新:结果是it is a bug,它将在pandas 0.20.0
中修复。
答案 0 :(得分:2)
这里的问题是,loc
隐式尝试最初返回Series
,即使您返回单个列,因此dtype
正在该行的标量值如果您只选择该列并使用loc
,那么它会支持该行的所有dtypes,但它不会转换为:
In [83]:
df_test['ints'].loc[0]
Out[83]:
1
您可以看到在不进行子选择时会发生什么:
In [84]:
df_test.loc[0]
Out[84]:
floats 4.5
ints 1.0
Name: 0, dtype: float64
这可能是不受欢迎的,我认为可能有关于此
的github问题此issue有点相关