gpt4 book ai didi

python - 用平均值替换缺失值

转载 作者:行者123 更新时间:2023-12-02 19:01:34 25 4
gpt4 key购买 nike

我正在探索 pandas 库,我发现 this数据集。我的任务是填写?平均值为按列组 'num-of-doors' 。当我使用dataframe.groupby('num-of-doors').mean()时pandas 无法找到这些列的平均值:

'peak-rpm', 'price', 'bore', 'stroke', 'normalized-losses', 'horsepower'

因此,我尝试使用自己的数据集来了解为什么它不起作用。我创建了一个包含以下内容的文件

c0,c1,type
1,2,0
2,3,0
2,4,0
1,?,1
1,3,1

我编写了以下脚本:

data = pd.read_csv("data.csv")
data = data.replace('?',np.nan)
print(data)
print(data.groupby('type').mean())

这就是我得到的输出:

   c0   c1  type
0 1 2 0
1 2 3 0
2 2 4 0
3 1 NaN 1
4 1 3 1
c0
type
0 1.666667
1 1.000000

您能解释一下这是怎么回事吗?为什么我对专栏c1没有恶意?即使我尝试了 Stackoverflow 的一些答案,但仍然一无所获。有什么建议吗?

非常感谢您的帮助。

最佳答案

问题是 c1 不是数字类型,请执行以下操作:

data = data.replace('?',np.nan)
data['c1'] = data['c1'].astype(float)
print(data.groupby('type').mean())

输出

            c0   c1
type
0 1.666667 3.0
1 1.000000 3.0

当您读取原始数据 DataFrame时,因为它有一个,该列是dtype对象(使用dtypes来验证):

c0       int64
c1 object
type int64
dtype: object

如果你想用组的均值替换 nan,请使用 transform + fillna :

data = data.replace('?',np.nan)
data['c1'] = data['c1'].astype(float)

res = data.groupby('type').transform('mean')
print(data.fillna(res))

输出

   c0   c1  type
0 1 2.0 0
1 2 3.0 0
2 2 4.0 0
3 1 3.0 1
4 1 3.0 1

最后的建议是,您可以将 csv 读取为:

data = pd.read_csv("data.csv", na_values='?')
print(data)

输出

   c0   c1  type
0 1 2.0 0
1 2 3.0 0
2 2 4.0 0
3 1 NaN 1
4 1 3.0 1

这将使您无需将列转换为数字。

关于python - 用平均值替换缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65490680/

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