你好,我从文件值创建了熊猫数据框,我得到了一些缺陷数据框,像
我的输入数据框
agr_1 agr_2
0,0,0,4,5,6,8,0 0,3,4,3,0,0,0
0,5,6,0,5,5,0 0,3,4,5,5,6
0,4,5,4,,5 0,4,3,4,5
我想删除零值并想取其余整数值的平均值而不考虑零,我如何通过熊猫来实现这一点
输出
agr_1 agr_2
5 3.3
4 4.25
4.5 4
答案 0 :(得分:2)
应用子例程进行浮点转换并计算平均值:
def mysub(r):
lst = [float(a) for a in r.split(',') if a != '0' and a != '']
return sum(lst) / len(lst)
df['agr_1'].apply(mysub)
0 5.75
1 5.25
2 4.50
Name: agr_1, dtype: float64
df['agr_2'].apply(mysub)
0 3.333333
1 4.600000
2 4.000000
Name: agr_2, dtype: float64
或将其应用于两列:
df.applymap(mysub)
agr_1 agr_2
0 5.75 3.333333
1 5.25 4.600000
2 4.50 4.000000
答案 1 :(得分:2)
我们可以做到
df.agr_1.str.split(',',expand=True).apply(pd.to_numeric,errors='coerce').replace({0:np.nan}).mean(1)
0 5.75
1 5.25
2 4.50
dtype: float64
或
df.agr_1.str.extractall(r'([1-9])').astype(float).mean(level=0,axis=0).iloc[:,0]
0 5.75
1 5.25
2 4.50
答案 2 :(得分:2)
想到的第一件事。没有理由说这会更好。
pd.to_numeric(df.stack().str.split(',').explode(), errors='coerce') \
.where(lambda x: x.ne(0)).mean(level=[0, 1]).unstack()
agr_1 agr_2
0 5.75 3.333333
1 5.25 4.600000
2 4.50 4.000000