使用DataFrame#loc和不同类型的参数

时间:2015-05-27 00:16:05

标签: python pandas

dfDataFrame,索引为dtype x。由于隐式类型转换,我最终不得不致电df.loc(n),其中n被隐式地从x转换为平凡不同的类型y。最常见的情况是将int转换为float。例如:

In [35]: df = DataFrame([[1, 2.0]]).set_index(0, drop=False); df
Out[35]: 
   0  1
0  
1  1  2

In [36]: df[0]
Out[36]: 
0
1    1
Name: 0, dtype: int64

In [37]: df.loc[1]
Out[37]: 
0    1
1    2
Name: 1, dtype: float64

In [38]: df.loc[df.loc[1][0]]
[...]
KeyError: 1.0

如您所见,第一列中的值(也作为索引)在从int64操作返回时从float64隐式转换为df.loc[1]。不幸的是,一旦发生这种情况,我就无法再将此值用于进一步的df.loc操作,因为索引仍为int64,并在float64索引中查找int64值永远都会失败。

处理此问题的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

您可以在执行.loc

时明确重新制作
>>> df.loc[df.loc[1].astype('int64')[0]]
0    1
1    2
Name: 1, dtype: float64

或者,更一般地说:

df.loc[df.loc[2].astype(df[0].dtype)[0]]