根据字符串条件填充缺失值
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
我正在尝试编写一个函数,根据文本列中的字符串条件从数字列中估算一些空值。
我的尝试例子:
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