.loc索引更改类型

时间:2017-04-12 10:19:11

标签: python pandas indexing

如果我的pandas.DataFrame包含不同类型的列(例如int64float64),请使用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中修复。

1 个答案:

答案 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有点相关