当我在我的数据帧上运行以下代码时,我得到了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')
^^^^^^ ^^^^^^