2017-11-17 2 views
0

データフレームをCSVとして保存しようとしていますが、配列のインデックスが多すぎます。保存は -Python - データフレームをCSVに保存する "配列のインデックスが多すぎます"エラー

df.to_csv('CCS_Matrix.csv') 

のために使用されるコードは、データフレームは250列と、約10万行のデータセットであり、この

Var10 Var100 Var101  
0 0  1  1 
1 0  0  1 
2 0  1  0 

のように見えます。データフレームのための

dtypesは

Var10  int64 
Var100 int64 
Var101 int64 
etc. 

すべてdtypesは250列で同じですされています。

ここでは、タイプ(DF)をプリントアウトでしたエラーメッセージ

--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-16-37cbe55e6c0d> in <module>() 
----> 1 df.to_csv('CCS_Matrix.csv', encoding='utf-8') 

~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in to_csv(self, path_or_buf, sep, na_rep, float_format, columns, header, index, index_label, mode, encoding, compression, quoting, quotechar, line_terminator, chunksize, tupleize_cols, date_format, doublequote, escapechar, decimal) 
    1401          doublequote=doublequote, 
    1402          escapechar=escapechar, decimal=decimal) 
-> 1403   formatter.save() 
    1404 
    1405   if path_or_buf is None: 

~/anaconda3/lib/python3.6/site-packages/pandas/io/formats/format.py in save(self) 
    1590     self.writer = csv.writer(f, **writer_kwargs) 
    1591 
-> 1592    self._save() 
    1593 
    1594   finally: 

~/anaconda3/lib/python3.6/site-packages/pandas/io/formats/format.py in _save(self) 
    1691     break 
    1692 
-> 1693    self._save_chunk(start_i, end_i) 
    1694 
    1695  def _save_chunk(self, start_i, end_i): 

~/anaconda3/lib/python3.6/site-packages/pandas/io/formats/format.py in _save_chunk(self, start_i, end_i) 
    1705         decimal=self.decimal, 
    1706         date_format=self.date_format, 
-> 1707         quoting=self.quoting) 
    1708 
    1709    for col_loc, col in zip(b.mgr_locs, d): 

~/anaconda3/lib/python3.6/site-packages/pandas/core/internals.py in to_native_types(self, slicer, na_rep, quoting, **kwargs) 
    611   values = self.values 
    612   if slicer is not None: 
--> 613    values = values[:, slicer] 
    614   mask = isnull(values) 
    615 

~/anaconda3/lib/python3.6/site-packages/pandas/core/sparse/array.py in __getitem__(self, key) 
    417    return self._get_val_at(key) 
    418   elif isinstance(key, tuple): 
--> 419    data_slice = self.values[key] 
    420   else: 
    421    if isinstance(key, SparseArray): 

IndexError: too many indices for array 
+0

をデータフレームを回すことで解決しましたか? –

+0

utf-8エンコーディングの有無にかかわらず同じエラーが生成され、明示的asciiエンコーディングでも発生します。 – RROBINSON

+0

'to_csv'のデフォルトの区切り記号はカンマです。いくつかの行で予想以上に多くの列を作成する可能性があります。 1つのデバッグステップは、問題の原因となっている行を絞り込んで絞り込むことです。 10M行では、初歩的なバイナリ検索のようなものが高速化する可能性があります。 –

答えて

1

のフル出力はありますか? SparseDataFrames hereでこの問題を指摘しました。

SparseDataFrameで.to_dense()を呼び出すと、従来のDataFrameを生成してこの問題を解決できました。それ以降はうまくいった。明らかに、それは記憶上の理由から理想的ではありませんが、少なくとも短期間では機能します。

パンダチームは本当にバグだと答えました。

0

あなたはcsv '.CSV(' name.csv) 'として保存する別のオプションを試すことができます。それはあなたのような別のエラーメッセージを与えることができます(「SparseDataFrame」オブジェクトが属性を持っていない「toCSV」) それはUTF-8`エンコーディング `なしで動作しますので、問題が密データフレームに

df.to_dense().to_csv("submission.csv", index = False, sep=',', encoding='utf-8') 
関連する問題