2015-02-11 74 views
5

我有一個奇怪的數據集:D型:整數,但LOC收益浮動

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 

,我已經投了前三欄的dtype是整數:

>>> df.dtypes 
year   int64 
firms   int64 
age   int64 
survival float64 

但現在我想要在另一個表中根據索引在這裏搜索:

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

這來自

df.loc[idx, 'age'] 
8.0 

爲什麼這會一直返回一個浮點值?我怎樣才能在otherDf執行查找?我在熊貓版0.15

+0

你可以將返回的float浮點型轉換爲一個快速修復的整數int(df.loc [idx,'age'])''這會給出>>> >>>' – ZdaR 2015-02-11 17:20:35

回答

7

拼搶值你得到一個浮點數,因爲每一行包含的floatint類型的混合。在與loc選擇行索引,整數轉換爲浮動:

>>> df.loc[4] 
year   1979.000000 
firms  390352.000000 
age    1.000000 
survival   0.774522 
Name: 4, dtype: float64 

因此,與df.loc[4, 'age']這裏選擇age項將產生1.0

爲了解決這個問題,並返回一個整數,你可以使用loc從剛剛age列,而不是整個數據框中選擇:

>>> df['age'].loc[4] 
1 
+0

啊,有趣。我想在另一欄中回答測試案例,但太懶惰了。希望能有同樣的觀察。 – 2015-02-11 19:00:08

+0

剛纔我也碰到過這個,所以非常感謝你的解釋。看起來像一個錯誤,不是? 'loc [row,col]'具有它需要知道返回類型應該是int的所有信息。還是有一些根本的原因,這真的是一個「功能」,而不是一個錯誤? – 2017-05-25 15:48:09

0

您是否需要使用loc?這個怎麼樣:

otherDf.loc(df['age'][idx]) 

通過「時代」 Series返回相應的類型(int64

0

我無法重現與熊貓0.15.1這種行爲。

>>> pd.__version__ 
'0.15.1' 
>>> df = pd.DataFrame({"age": [1,8]}) 
>>> df 
    age 
0 1 
1 8 
>>> df.dtypes 
age int64 
dtype: object 
>>> df.loc[1, "age"] 
8 
>>> type(df.loc[1, "age"]) 
<type 'numpy.int64'> 

自發性我找不到在更改日誌相關的條目,但我們可能會想知道您是否使用0.15.0或更新的東西。

編輯:

添加另一列用浮子式的確使該行的數據類型成爲標準化浮動(如ajcr在他的回答中指出):

>>> df = pd.DataFrame({"age": [1, 8], "greatness": [0.2, 1.7]}) 
>>> type(df.loc[1, "age"]) 
<type 'numpy.float64'>