我正试图编写一个函数,根据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.contains
与DataFrame.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)
首先生成要用映射替换的元素列表,然后使用该列表替换要替换的元素。
编辑:修复代码中的拼写错误