让df
为DataFrame
,索引为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
值永远都会失败。
处理此问题的最佳方式是什么?
答案 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]]