Python - 将数据帧保存为CSV“数组索引太多”错误

时间:2017-11-17 03:16:50

标签: python pandas csv

我正在尝试将数据框保存为CSV并获得“数组索引太多”错误。用于保存的代码是 -

df.to_csv('CCS_Matrix.csv')

数据框看起来像这样

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

数据集中有250列和大约1000万行。

数据框的dtypes是

Var10     int64
Var100    int64
Var101    int64
etc.

250列的所有dtypes都相同。

以下是错误消息的完整输出

---------------------------------------------------------------------------
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

2 个答案:

答案 0 :(得分:4)

你能打印出类型(df)吗? 我在SparseDataFrames here中注意到了这个问题。

我能够通过在SparseDataFrame上调用.to_dense()来解决问题,从而产生传统的DataFrame。之后工作得很好。显然,由于记忆原因,这并不理想,但至少它在短期内起作用。

大熊猫团队回应说这确实是一个错误。

答案 1 :(得分:1)

你可以尝试另外一个选项来保存为csv'。toCSV('name.csv)'。这可以给你一个不同的错误信息,如('SparseDataFrame'对象没有属性'toCSV')  因此,通过将数据帧转换为密集数据帧来解决问题

df.to_dense().to_csv("submission.csv", index = False, sep=',', encoding='utf-8')