[英]pandas table subsets giving invalid type comparison error
我正在使用pandas並希望選擇數據子集並將其應用於其他列。 例如
我現在使用.isnull()
和.notnull()
。 例如
df = pd.DataFrame({'A' : pd.Series(np.random.randn(4)),
'B' : pd.Series(np.nan),
'C' : pd.Series(['yes','yes','no','maybe'])})
df['D']=''
df
Out[44]:
A B C D
0 0.516752 NaN yes
1 -0.513194 NaN yes
2 0.861617 NaN no
3 -0.026287 NaN maybe
# Now try the first conditional expression
df['D'][df['A'].notnull() & df['B'].isnull()] \
= df['A'][df['A'].notnull() & df['B'].isnull()]
df
Out[46]:
A B C D
0 0.516752 NaN yes 0.516752
1 -0.513194 NaN yes -0.513194
2 0.861617 NaN no 0.861617
3 -0.026287 NaN maybe -0.0262874
當添加第三個條件時,還要檢查C列中的數據是否與特定字符串匹配,我們得到錯誤:
df['D'][df['A'].notnull() & df['B'].isnull() & df['C']=='yes'] \
= df['A'][df['A'].notnull() & df['B'].isnull() & df['C']=='yes']
File "C:\Anaconda2\Lib\site-packages\pandas\core\ops.py", line 763, in wrapper
res = na_op(values, other)
File "C:\Anaconda2\Lib\site-packages\pandas\core\ops.py", line 718, in na_op
raise TypeError("invalid type comparison")
TypeError: invalid type comparison
我已經讀過這是因為數據類型不同而發生的。 如果我在C列中更改整數或布爾值的所有字符串,我可以使它工作。 我們也知道字符串本身就可以工作,例如df['A'][df['B']=='yes']
給出一個布爾列表。
那么在這個條件表達式中組合這些數據類型時,任何想法如何/為什么不起作用? 什么是pythonic方式做什么看起來很啰嗦?
謝謝
如果這個解決方案對任何人都不起作用,那么發生在我身上的另一種情況是即使我正在以dtype=str
讀取所有數據(因此進行任何字符串比較都應該沒問題[即df[col] == "some string"
]),我有一個所有空值的列,它變成了float
類型,在與字符串比較時會產生錯誤。
為了解決這個問題,您可以使用.astype(str)
來確保執行字符串到字符串的比較。
我認為你需要在條件中添加括號()
,更好的是使用ix
選擇具有布爾掩碼的列,該布爾掩碼可以分配給變量mask
:
mask = (df['A'].notnull()) & (df['B'].isnull()) & (df['C']=='yes')
print (mask)
0 True
1 True
2 False
3 False
dtype: bool
df.ix[mask, 'D'] = df.ix[mask, 'A']
print (df)
A B C D
0 -0.681771 NaN yes -0.681771
1 -0.871787 NaN yes -0.871787
2 -0.805301 NaN no
3 1.264103 NaN maybe
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.