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 に答える