所有通过的物体都没有,熊猫

时间:2014-09-11 04:17:59

标签: python-2.7 pandas group-by dataframe mean

我有这个数据框:

data = {'My_name':["abc","nc","there",""] , 'Val1':[44.20,22,None,44],'Val2':[50,20,40,72.2]}
df1 = pd.DataFrame(data)  

  My_name     Val1  Val2
0   abc       44.2  50.0
1   nc        22.0  20.0
2   there     NaN   40.0
3             44.0  72.2  
4   there     28    60

我使用以下指令来获取基于My_name的值的均值:

 df2 = df1.where(pd.notnull(df1), None)  
 dcm = df2.groupby(['My_name']).agg([np.mean]) 

Exception: All objects passed were None

我尝试了各种测试并意识到错误是因为None同时计算平均值。 我尝试使用以下代码来处理None值:

df3 = df2.where(pd.notnull(df2['Val1']), None)
df4 = df3.where(pd.notnull(df3['Val2']), None) 
dcm2 = df4.groupby(['My_name']).agg([np.mean])  

但我仍然得到同样的错误。如何在不破坏NaN的情况下忽略NaN?

这样的事情也会做: 创建两个数据帧。一个没有None值(在Val1和Val2中),另一个没有None值。 例如:

df_sub:



      My_name     Val1  Val2
    0   abc       44.2  50.0
    1   nc        22.0  20.0 
    3             44.0  72.2  
    4   there     28    60  

df_sub2

   My_name    Val1  Val2
3  there      Nan   40.0  

df.dropna()看起来是一个很好的功能,所以我做了:

df_sub = df2.dropna(subset=['Val1','Val2'])

我如何获得第二个数据帧?

1 个答案:

答案 0 :(得分:3)

首先,我认为您不需要将NaN值替换为None,因为NaN是缺失值的默认指标,mean将忽略这些值。 1}}默认情况下,pandas(mean的{​​{1}}参数默认为True。)
此外,用skipna替换它将使对象的列dtype(不再是数字),并且并非所有操作都按预期工作。

因此,只需尝试对原始数据帧进行分组操作:

None

其次,要拆分数据框,您可以执行以下操作:

dcm = df1.groupby(['My_name']).agg([np.mean])

和另一个子集的In [26]: df1[pd.isnull(df1[['Val1', 'Val2']]).any(axis=1)] Out[26]: My_name Val1 Val2 2 there NaN 40 ,但这确实相当于较短的df1[pd.notnull(df1[['Val1', 'Val2']]).all(axis=1)]