根据字符串条件填充缺失值



我正试图编写一个函数,根据Text列中的字符串条件,从Numeric列中估算一些null值。

我的尝试示例:

def fill_nulls(string, val):
if df['TextColumn'].str.contains(string) == True:
df['NumericColumn'] = df['NumericColumn'].fillna(value=val)

"string"one_answers"val"参数是手动输入的。我试着将函数应用于我的数字列,但它给了我这个错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我试图找到可以根据我的情况进行调整的示例,但它们都涉及使用"groupby"来获得与只有少数唯一值的离散字符串值相关的平均数值。基本上,只能估算精确的措辞,而我正试图通过使用部分字符串来推广我的字符串过滤,并根据文本列的结果行,在数值列

Series.str.containsDataFrame.loc:一起使用

m = df['TextColumn'].str.contains(string)
df.loc[m, 'NumericColumn'] = df.loc[m, 'NumericColumn'].fillna(value=val)

或者由&为逐位AND提供链条件,由Series.isna测试缺失值并在DataFrame.loc:中分配值

m1 = df['TextColumn'].str.contains(string)
m2 = df['NumericColumn'].isna()
df.loc[m1 & m2, 'NumericColumn'] = val

您可以使用

x = df['TextColumn'].map(lambda x: x.contains(string))
df['NumericColumn'][x] = df['NumericColumn'][x].fillna(value=val)

首先生成要用映射替换的元素列表,然后使用该列表替换要替换的元素。

编辑:修复代码中的拼写错误

最新更新