在数据框上运行此代码时,我得到的是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
所以我的代码有问题。
答案 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')
^^^^^^ ^^^^^^