繁体   English   中英

在 Panda 的 Dataframe 行中创建一个迭代函数以替换空值

[英]Create a function iterating in Panda's Dataframe rows to replace null values

我有一个带有一些空值的 DataFrame,我想用其他 DataFrame 中的平均值替换它们。 我创建了一个函数,以后应该用 lambda 实现它,但我一直收到错误。

我有一个这样的数据框:

顾客类型 类别 满意 年龄
非高级 电子产品 不满意
非高级 美丽 使满意
优质的 运动的 使满意 38.0
非高级 运动的 不满意

我需要填写这些数据:

顾客类型 满意 年龄
非高级 不满意 32.440740
非高级 使满意 28.896348
优质的 不满意 43.767723
优质的 使满意 44.075901

所以我创建了一个函数

def fill_age(x):
if x.isnull()== True:
    return[(grp.CustomerType==x.CustomerType) | (grp.Satisfaction==x.Satisfaction)]['Age'].values[0]

我想使用lambda 函数应用于我的数据框以遍历所有行:

df['Age'] = [df.apply(lambda x: fill_age(x) if np.isnan(x['Age']) else 
                                            x['Age'], axis=1) for x in df]

但我不断收到此错误

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

你们中的任何人都可以帮助我吗?

假设您在DataFrame中错误地调用apply并且fill_age()df["Age"]值上正常工作,您需要替换此语句,只是为了评估x并分配一个确定的值(当前Age或要替换使用外部数据)然后通过else-if条件检查,此代码不应返回错误

df["Age"] = df["Age"].apply(lambda x: fill_age(x) if np.isnan(x) else x)

我们应该try avoid use apply ,所以我们可以使用:

df['Age'] = df['Age'].fillna(
    df.groupby(['CustomerType', 'Satisfaction'])['Age'].transform('first')
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM