NaN值试图过滤熊猫数据框中的行

时间:2020-09-24 10:26:29

标签: python 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中至少一个单词和{中的至少一个单词的每一行分配给新列list_1,值1 {1}};否则为0。

这意味着,如果我有。

list_2

和列表为:

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

所以我的代码有问题。

1 个答案:

答案 0 :(得分:1)

df[]分配了布尔索引,因此失败。您只需要分配掩码并通过here转换为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')
           ^^^^^^                                                                                                               ^^^^^^