簡體   English   中英

NaN 值試圖過濾 Pandas 數據框中的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM