2016-07-28 27 views
2

因此,我有一個數據幀,我們稱之爲df1,它看起來像下面這樣。檢查數字是否包含在索引熊貓中的問題

Index ID 
    1  90 
    2  508 
    3  692 
    4  944 
    5  1172 
    6  1998 
    7  2022 

現在,如果我調用(508 == df ['ID'])。any()它將返回true,因爲它應該。但是,如果我有另外一個數據幀,DF2,看起來像以下:

Index Num 
    1  83 
    2  508 
    3  912 

,我要檢查,如果訂購數量都包含在標識從DF1使用ILOC返回未施膠對象的LEN()的錯誤。這是我用過的確切代碼:

(df2.iloc[1][0] == df2['ID']).any() 

它返回上面提到的錯誤。我也嘗試設置一個變量到df1.iloc [1] [0],沒有工作,並調用該變量的int(),也沒有工作。任何人都可以提供一些關於此的見解

+0

你想要什麼輸出它是什麼?這是真的嗎? – Psidom

+0

'np.int64(3)== df ['ID']'也返回相同的錯誤。雖然你說轉換爲int不起作用;這應該。改變順序也應該起作用。 ('(df ['ID'] == df2.iloc [1] [0])。any()' – ayhan

+0

期望的輸出是什麼? – Alexander

回答

2

嘗試轉動它。

(df1['ID'] == df2.iloc[1][0]).any() 

True 

這是發生爲如何==正在爲對象處理的結果被傳遞給它。

在這種情況下,你有

type(df2.iloc[1][0]) 

numpy.int64 

類型的第一對象和類型的第二

pandas.core.series.Series 

==__eq__不處理好組合。

然而,這個工程太:

(int(df2.iloc[1][0]) == df1['ID']).any() 

或者:

(int(df2.iloc[1, 0]) == df1['ID']).any() 
+0

這真的很有趣,翻轉它會工作。真的沒有想到這樣簡單的東西會解決它,但謝謝!並且很好的解釋 – JSolomonCulp

+0

作爲一個後續,假設我想追加那些不是 – JSolomonCulp

+0

的Nums作爲一個後續,說我想將不在df1中的Nums添加到ID的末尾。我有if語句,但是當我去追加時,我得到「無法連接非NDFrame對象」。這是使用df1.append(df2.iloc [0] [0])和df1.append(int(df2.iloc [0] [0])) – JSolomonCulp

0

像這樣的東西來檢查ID列在df2Num柱:

>>> df1.ID.isin(df2.Num) 
Index 
1 False 
2  True 
3 False 
4 False 
5 False 
6 False 
7 False 
Name: ID, dtype: bool 

或:

>>> df2.Num.isin(df1.ID) 
Index 
1 False 
2  True 
3 False 
Name: Num, dtype: bool 

或者,如果你只是想通過索引位置看到匹配的數字:

>>> df2.where(df2.Num.isin(df1.ID) * df2.Num, np.nan) 
     Num 
Index  
1  NaN 
2  508 
3  NaN 
1

這工作

(df['ID']==df2.iloc[1][0]).any() 
+0

@Alexander這是一個錯字意味着df –

+0

很好,這真的很有趣==如何工作和翻轉訂單解決它。作爲後續,假設我想將不在df1中的Nums追加到ID的末尾。我有if語句,但是當我去追加時,我得到「無法連接非NDFrame對象」。這是使用df1.append(df2.iloc [0] [0])和df1.append(int(df2.iloc [0] [0])) – JSolomonCulp

+0

@JSolomonCulp您不能將單個值添加到數據框那你需要添加整個系列。 df1.append(df2.loc [0])會起作用 –