pandas:使用分组的数据框to_excel的麻烦

我正在尝试使用to_excel函数将使用groupby创build的数据框保存到excel文件中。 当我在ipython笔记本中预览数据时,它会根据需要显示。 groupby代码很简单:

grouped = teach_freq.groupby(['Focal','follow','Activity']) grouped.head() <class 'pandas.core.frame.DataFrame'> MultiIndex: 1797 entries, (10107.0, 192.0, ff, 25220.0) to (53704.0, 142.0, ss.rn, 18823.0) Data columns (total 16 columns): Epoch 1790 non-null values follow 1797 non-null values T_Opp 1797 non-null values T_Dir 1797 non-null values T_Enh 1797 non-null values T_SocTol 1797 non-null values 

…等等dtypes:float64(3),int64(6),object(7)

to_excel代码也很简单:

  grouped.to_excel('filename.xls', sheet_name='sheet1') 

当我运行这个最后的代码时,只有几行数据会将它存储到excel文件中(大约1800行数据中有大约3个),我在ipython笔记本中预览了另一部分数据,如下所示:

  Focal follow Activity 10107 192 ff None 10212 187 rn.ss None 194 hc None pa None 10213 166 hr.hg None pa None sr.hg None sr.hl None 

这些数据似乎只是我分组的3列,再加上一列None,这在我的数据框中不存在。 在文件中,我得到了6行正确格式的数据,标题和所有。 如果我密切关注Finder中正在写入的文件,大小会随着代码行的不断变化而变化,我认为这个代码行一次只能写入一小块数据,写下每一个。

最后的文件大小是微小的(6KB),但是在代码运行的某些时候,它是更大的(高达32KB)。

最后,在ipython数据中显示的最后几行数据看起来就是那些成功写入到excel文件之前的行,这表明由于某种原因,它只保存那些超过ipython的数据行笔记本预览限制。 我不确定为什么有人会希望这是一个function,或者为什么它会这样工作。

这是奇怪的,我希望有人可以向我解释为什么发生这种情况。 我查看了groupby和to_excel文档,并浏览了任何有类似问题的人,但还没有find它。 我已经用这个相同的数据来处理dataframe,没有分组,也没有任何类似的问题。 我甚至不清楚为什么我会在笔记本中获得输出,就像其他时候我用过的那样,我只能看到excel文件本身的输出。

在这里看到完整的文档

问题是你正在尝试对DataFrameGroupby对象进行操作,这允许在底层DataFrame上执行一些操作。 但是,您需要对groupby对象执行某些操作以创build新的数据框。

to_excel不应该工作(事实上在即将到来的0.13版本将被禁用)。

 In [1]: df = DataFrame({'X' : ['B', 'B', 'A', 'A'], 'Y' : [1, 2, 3, 4]}) In [2]: df Out[2]: XY 0 B 1 1 B 2 2 A 3 3 A 4 In [3]: df.groupby('X') Out[3]: <pandas.core.groupby.DataFrameGroupBy object at 0x40523d0> In [4]: df.groupby('X').sum() Out[4]: Y XA 7 B 3 In [5]: type(df.groupby('X').sum()) Out[5]: pandas.core.frame.DataFrame 

因此,您需要将聚合操作(例如sum或使用applyapply到分组的框架,然后创build一个新的框架,您可以进行to_excel

这只是一个部分的答案,但我发现,如果我使用下面的代码,to_excel函数可以正常工作。 但这似乎与典型的to_excel用法不一致,所以我仍然希望有人能向我解释这一点。

  grouped.head().to_excel('PREVIEW.xls') 

它似乎也不是一个永久的解决scheme,因为head()不会在一个大文件上显示所有的数据。 实际上,为什么我这里有点困惑。 但它是有效的,所以我会和它一起去,希望有人能够引用我正确的文档,以便我能理解为什么是这样。