2016-07-29 169 views
3

我正在使用python 2.7.9上的pandas 0.18.0。聚合一个空DataFrame时保留列

采取由一些列的样本DataFrame和组,然后将结果总结在不同的列,例如:

>>> df = pandas.DataFrame([[1,2,3],[4,5,6],[1,2,9]], columns=['a','b','c']) 
>>> print df 
    a b c 
0 1 2 3 
1 4 5 6 
2 1 2 9 
>>> df.groupby(['a','b'], as_index=False)['c'].sum() 
    a b c 
0 1 2 12 
1 4 5 6 

这一切都看起来不错,但是当同样的操作预制一个空DataFrame的列从结果中删除:

>>> empty = pandas.DataFrame(columns=['a','b','c']) 
>>> print empty 
Empty DataFrame 
Columns: [a, b, c] 
Index: [] 
>>> empty.groupby(['a','b'], as_index=False)['c'].sum() 
Empty DataFrame 
Columns: [] 
Index: [] 

是有人从结果稍后在代码中引用有效列,会导致一个关键的错误。有没有办法保留列?

回答

1

我相信这是groupby.sum()的标准结果(请参见http://pandas.pydata.org/pandas-docs/stable/missing_data.html)。

我能想到的唯一的办法是写一个如果,如果数据框为空,例如:

if sum(empty.isnull().sum()) == 9: 
    print "empty dataframe" 
elif sum(empty.isnull().sum()) < 9: 
    empty.groupby(['a','b'], as_index=False)['c'].sum() 

这应该让你的空数据框与列标题语句中检查。 希望这有助于。

相关问题