当length = 4时从float中删除0并用平均值Pandas替换NaN

时间:2016-12-13 20:45:19

标签: python pandas

我在数据框中有一个列,例如:

df = [  A  
7280.0         
7330.0  
635.0  
540.0  
     NaN ]

我想要做的是删除最后的0(从728 0 和733 0 )然后用平均值替换NaN(在此示例中( 728 + 733 + 635 + 540)/ 4 = 659)。这样做的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我认为您需要按mask过滤并按10应用楼层除法。 fillna的最后mean

df.A = df.A.mask( df.A // 1000 > 0, df.A // 10)
df.A = df.A.fillna(df.A.mean())
print (df)
       A
0  728.0
1  733.0
2  635.0
3  540.0
4  659.0

感谢DYZ寻求其他解决方案:

df[df.A>1000]/=10
df.A.fillna(df.A.mean(), inplace=True)
print (df)
       A
0  728.0
1  733.0
2  635.0
3  540.0
4  659.0

通过评论编辑:

df = pd.DataFrame({'A': ['7280.0', '7330.0', '635.0', '540.0', np.nan, 'a']})
print (df)
        A
0  7280.0
1  7330.0
2   635.0
3   540.0
4     NaN
5       a

df.A = pd.to_numeric(df.A, errors='coerce')
print (df)
        A
0  7280.0
1  7330.0
2   635.0
3   540.0
4     NaN
5     NaN

df.A = df.A.mask( df.A // 1000 > 0, df.A // 10)
df.A = df.A.fillna(df.A.mean())
print (df)
       A
0  728.0
1  733.0
2  635.0
3  540.0
4  659.0
5  659.0

答案 1 :(得分:0)

使用pandas.Series.apply()pd.to_numeric()函数的另一种替代解决方案:

df = pd.DataFrame(['A', 7280.0, 7330.0, 635.0, 540.0, 'NaN'])
df[0] = df[0].apply(lambda x: int(str(x)[:-3]) if (isinstance(x, float) and len(repr(x)) == 6 and x % 10.0 == 0.0) else x)
df[df == 'NaN'] = pd.to_numeric(df[0], errors='coerce').mean()
print(df)

输出:

     0
0    A
1  728
2  733
3  635
4  540
5  659