dtype:integer,但loc返回float

Foo*_*Bar 7 python types dataframe pandas

我有一个奇怪的数据集:

   year   firms  age  survival
0  1977  564918    0       NaN
2  1978  503991    0       NaN
3  1978  413130    1  0.731310
5  1979  497805    0       NaN
6  1979  390352    1  0.774522
Run Code Online (Sandbox Code Playgroud)

我将dtype前三列的整数转换为整数:

>>> df.dtypes
year          int64
firms         int64
age           int64
survival    float64
Run Code Online (Sandbox Code Playgroud)

但现在我想在这里根据索引搜索另一个表:

idx = 331
otherDf.loc[df.loc[idx, 'age']]
Traceback (most recent call last):
(...)
KeyError: 8.0
Run Code Online (Sandbox Code Playgroud)

这来自

df.loc[idx, 'age']
8.0
Run Code Online (Sandbox Code Playgroud)

为什么这会继续返回浮点值?我怎样才能执行查找otherDf?我是熊猫版0.15.

Ale*_*ley 9

你得到一个浮点数,因为每一行包含混合floatint类型.选择行索引后loc,将整数转换为浮点数:

>>> df.loc[4]
year          1979.000000
firms       390352.000000
age              1.000000
survival         0.774522
Name: 4, dtype: float64
Run Code Online (Sandbox Code Playgroud)

所以选择age这里的条目df.loc[4, 'age']会产生1.0.

要解决此问题并返回一个整数,您可以使用loc仅从age列中进行选择而不是整个DataFrame:

>>> df['age'].loc[4]
1
Run Code Online (Sandbox Code Playgroud)