[英]NaN values trying to filter rows in pandas dataframe
當我在數據幀上運行此代碼時,我得到 NaN 值:
df['Text'] =df[en_df_low['sent'].str.contains('|'.join(list_1), case=False) & df['sent'].str.contains('|'.join(list_2), case=False)]
這段代碼應該做的是為一個新列Text
分配值 1 給包含list_1
中至少一個單詞和list_2
中至少一個單詞的list_2
; 否則為 0。
這意味着,如果我有。
sent
home light sun sunshine
car park home
home light
sun car park
和列表是:
list_1=["home", "sun"]
list_2=["light"]
我應該
sent Text
home light sun sunshine 1
car park home 0
home light 1
sun car park 0
不幸的是我得到:
sent Text
home light sun sunshine NaN
car park home NaN
home light NaN
sun car park NaN
所以我的代碼有問題。
df[]
分配了布爾索引,所以它失敗了。 您只需要分配掩碼並通過Series.view
轉換為1,0
:
m1 = en_df_low['sent'].str.contains('|'.join(list_1), case=False)
m2 = df['sent'].str.contains('|'.join(list_2), case=False)
df['Text'] = (m1 & m2).view('i1')
print (df)
sent Text
0 home light sun sunshine 1
1 car park home 0
2 home light 1
3 sun car park 0
在您的解決方案中刪除df[]
:
df['Text'] =df[en_df_low['sent'].str.contains('|'.join(list_1), case=False) & df['sent'].str.contains('|'.join(list_2), case=False)]
^^^^^^ ^^^^^^
添加().view('i1')
:
df['Text'] = (en_df_low['sent'].str.contains('|'.join(list_1), case=False) & df['sent'].str.contains('|'.join(list_2), case=False)).view('i1')
^^^^^^ ^^^^^^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.