我正在尝试预处理数据,尤其是处理缺失值。 我有一个单词列表和两列有文本数据。如果列表中的单词位于两个文本列中的至少一个中,则填充缺少单词
import pandas as pd
a=['coffee', 'milk', 'sugar']
test=pd.DataFrame({'col':['missing', 'missing', 'missing'],
'text1': ['i drink tea', 'i drink coffee', 'i drink whiskey'],
'text2': ['i drink juice', 'i drink nothing', 'i drink milk']
})
因此,如果应用fillna(“缺失”),数据框看起来就像“col”列“缺少”
Out[19]:
col text1 text2
0 missing i drink tea i drink juice
1 missing i drink coffee i drink nothing
2 missing i drink whiskey i drink milk
我想出了这样的代码应用循环
for word in a:
test.loc[(test["col"]=='missing') & ((test["text1"].str.count(word)>0)
| (test['text2'].str.count(word)>0)), "col"]=word
在列表“a”中有100 000行和2000个元素,完成作业大约需要870秒。 是否有任何解决方案可以使更快的数据帧更快? 提前致谢
答案 0 :(得分:1)
一些建议:
.str.count
代替.str.contains
?fillna('missing')
? pd.isnull(test["col"])
test["col"]=='missing'
def fill_missing(original_df, column_name, replacements, inplace=True):
df = original_df if inplace else original_df.copy()
for word in replacements:
empty = pd.isnull(df[column_name])
if not empty.any():
return df
contained = (df.loc[empty, "text1"].str.contains(word)) | (df.loc[empty, 'text2'].str.contains(word))
df.loc[contained[contained].index, column_name] = word
return df
所以这可以归结为这样的事情:
$arrayJSON = json_encode($balance1)