gpt4 book ai didi

python - Pandas:基于列 Dtype 的一般数据插补

转载 作者:行者123 更新时间:2023-11-28 22:21:14 25 4
gpt4 key购买 nike

我正在处理一个包含约 80 列的数据集,其中许多包含 NaN。我绝对不想手动检查每一列的 dtype 并据此进行估算。

所以我编写了一个函数来根据列的 dtype 估算列的缺失值:

def impute_df(df, col):
# if col is float, impute mean
if df[col].dtype == "int64":
df[col].fillna(df[col].mean(), inplace=True)
else:
df[col].fillna(df[col].mode()[0], inplace=True)

但要使用它,我必须遍历我的 DataFrame 中的所有列,例如:

for col in train_df.columns:
impute_df(train_df, col)

而且我知道 Pandas 中的循环通常很慢。有没有更好的方法来解决这个问题?

谢谢!

最佳答案

我想你需要select_dtypes对于数字和非数字列,然后将 fillna 应用于过滤列:

df = pd.DataFrame({'A':list('abcdef'),
'B':[np.nan,5,4,5,5,4],
'C':[7,8,np.nan,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'F':['a','a','b','b','b',np.nan]})

print (df)

A B C D E F
0 a NaN 7.0 1 5 a
1 b 5.0 8.0 3 3 a
2 c 4.0 NaN 5 6 b
3 d 5.0 4.0 7 9 b
4 e 5.0 2.0 1 2 b
5 f 4.0 3.0 0 4 NaN

cols1 = df.select_dtypes([np.number]).columns
cols2 = df.select_dtypes(exclude = [np.number]).columns
df[cols1] = df[cols1].fillna(df[cols1].mean())
df[cols2] = df[cols2].fillna(df[cols2].mode().iloc[0])
print (df)
A B C D E F
0 a 4.6 7.0 1 5 a
1 b 5.0 8.0 3 3 a
2 c 4.0 4.8 5 6 b
3 d 5.0 4.0 7 9 b
4 e 5.0 2.0 1 2 b
5 f 4.0 3.0 0 4 b

关于python - Pandas:基于列 Dtype 的一般数据插补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com