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

Filling Missing Values Based on String Condition

我正在尝试编写一个函数,根据文本列中的字符串条件从数字列中估算一些空值。

我的尝试例子:

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

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

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

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

您可以使用

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

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

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

使用Series.str.contains with DataFrame.loc:

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

或按位 & 的链条件 AND 测试缺失值 Series.isna and assign value in DataFrame.loc:

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