0

我正在尝试使用 to_excel 函数将使用 groupby 创建的数据框保存到 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 中写入的文件,大小会随着 to_excel 代码行上下变化,我认为这表明它一次将小块数据写入文件,但过度 -写下一个。

最终文件大小很小(6KB),但在代码运行的某些时候,它会更大(最多 32KB)。

最后,在 ipython 数据中显示的最后几行数据似乎是那些成功写入 excel 文件的行之前的行,这表明由于某种原因它只保存了那些经过 ipython 的数据行笔记本预览限制。我不确定为什么有人会想要它作为一个功能,或者为什么它会以这种方式运行。

这很奇怪,我希望有人能向我解释为什么会这样。我查看了 groupby 和 to_excel 文档并浏览了任何有类似问题的人,但没有找到。我已经将 to_excel 用于具有相同数据的数据帧,这些数据没有分组,并且没有任何类似的问题。实际上,我什至不清楚为什么要在笔记本中获得输出,因为其他时候我使用过 to_excel,我只在 excel 文件本身中看到输出。

4

3 回答 3

4

在此处查看完整文档

问题是您试图对一个DataFrameGroupby对象进行操作,该对象允许对底层 DataFrame进行一些操作。但是,您需要对groupby 对象做一些事情来创建一个新的数据框。

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

In [1]: df = DataFrame({'X' : ['B', 'B', 'A', 'A'], 'Y' : [1, 2, 3, 4]})

In [2]: df
Out[2]: 
   X  Y
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
X   
A  7
B  3

In [5]: type(df.groupby('X').sum())
Out[5]: pandas.core.frame.DataFrame

所以你需要对你的分组框架应用一个聚合操作(例如sum,或使用apply),然后它会创建一个新的框架,你可以to_excel

于 2013-10-08T19:15:22.703 回答
0

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

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

这似乎也不是一个永久的解决方案,因为 head() 不会在更大的文件中显示所有数据。我实际上有点困惑为什么会这样做,在这里。但它有效,所以我会继续使用它,并希望有人可以将我推荐给正确的文档,以便我能理解为什么会这样。

于 2013-10-08T18:51:20.147 回答
-1

我遇到了同样的问题,我使用了 grouped.first().to_excel('filename.xls') 注意:head() 没有写入所有值,我认为它只写了前 5 行或类似的 smthng

于 2019-09-03T16:17:36.663 回答