根据条件从列表中填写缺失值

时间:2017-12-11 17:24:05

标签: python pandas missing-data

我正在尝试预处理数据,尤其是处理缺失值。 我有一个单词列表和两列有文本数据。如果列表中的单词位于两个文本列中的至少一个中,则填充缺少单词

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秒。 是否有任何解决方案可以使更快的数据帧更快? 提前致谢

1 个答案:

答案 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)