创建一个在 Panda 的 Dataframe 行中迭代以替换空值的函数
Create a function iterating in Panda's Dataframe rows to replace null values
这几天我一直在为这段代码苦苦挣扎,我想我应该在这里试一试。
我有一个带有一些空值的 DataFrame,我想用我在其他 DataFrame 中的平均值替换这些空值。我创建了一个函数,稍后应该使用 lambda 来实现它,但我一直收到错误。
我有一个像这样的数据框:
CustomerType
Category
Satisfaction
Age
Not Premium
Electronics
Not Satisfied
NaN
Not Premium
Beauty
Satisfied
NaN
Premium
Sports
Satisfied
38.0
Not Premium
Sports
Not Satisfied
NaN
我需要填写这些数据:
CustomerType
Satisfaction
Age
Not Premium
Not Satisfied
32.440740
Not Premium
Satisfied
28.896348
Premium
Not Satisfied
43.767723
Premium
Satisfied
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
条件检查,此代码不应 return错误
df["Age"] = df["Age"].apply(lambda x: fill_age(x) if np.isnan(x) else x)
我们应该,所以我们可以改用:
df['Age'] = df['Age'].fillna(
df.groupby(['CustomerType', 'Satisfaction'])['Age'].transform('first')
)
这几天我一直在为这段代码苦苦挣扎,我想我应该在这里试一试。
我有一个带有一些空值的 DataFrame,我想用我在其他 DataFrame 中的平均值替换这些空值。我创建了一个函数,稍后应该使用 lambda 来实现它,但我一直收到错误。
我有一个像这样的数据框:
CustomerType | Category | Satisfaction | Age |
---|---|---|---|
Not Premium | Electronics | Not Satisfied | NaN |
Not Premium | Beauty | Satisfied | NaN |
Premium | Sports | Satisfied | 38.0 |
Not Premium | Sports | Not Satisfied | NaN |
我需要填写这些数据:
CustomerType | Satisfaction | Age |
---|---|---|
Not Premium | Not Satisfied | 32.440740 |
Not Premium | Satisfied | 28.896348 |
Premium | Not Satisfied | 43.767723 |
Premium | Satisfied | 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
条件检查,此代码不应 return错误
df["Age"] = df["Age"].apply(lambda x: fill_age(x) if np.isnan(x) else x)
我们应该
df['Age'] = df['Age'].fillna(
df.groupby(['CustomerType', 'Satisfaction'])['Age'].transform('first')
)