大熊猫从列中删除值

时间:2020-04-29 21:42:29

标签: python python-3.x pandas

你好,我从文件值创建了熊猫数据框,我得到了一些缺陷数据框,像

我的输入数据框

  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

3 个答案:

答案 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