NaN值试图过滤pandas数据帧中的行



当我在我的数据帧上运行以下代码时,我得到了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中的至少之一个单词;否则为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')
^^^^^^                                                                                                               ^^^^^^

最新更新