web-dev-qa-db-ja.com

DataFrameからcsvに書き込むpython pandas

2つの列を追加し、CSVファイルに回答を書き込むプログラムを作成しましたが、選択した列のみを書き込みたいときにエラーが発生します。これが私の論理です:

import pandas as pd

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
                           'foo', 'bar', 'foo', 'bar'],
                'B' : ['one', 'one', 'two', 'two',
                          'two', 'two', 'one', 'two'],
                'C' : [56, 2, 3, 4, 5, 6, 0, 2],
                'D' : [51, 2, 3, 4, 5, 6, 0, 2]})

grouped = df.groupby(['A', 'B']).sum()

grouped['sum'] = (grouped['C'] / grouped['D']) 
# print (grouped[['sum']])


a = pd.DataFrame(grouped)


a.to_csv("C:\\Users\\test\\Desktop\\test.csv", index=False, cols=('A','B','sum'))

列A、B、および合計のデータのみを書き込む方法次のエラーが表示されます

Traceback (most recent call last):
  File "C:\Users\test\Desktop\Eclipse\yuy\group.py", line 19, in <module>
    a.to_csv("C:\\Users\\test\\Desktop\\test.csv", index=False, cols=('A','B','sum'))
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 1126, in to_csv
    date_format=date_format)
  File "C:\Python27\lib\site-packages\pandas\core\format.py", line 992, in __init__
    self.obj = self.obj.loc[:, cols]
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 1018, in __getitem__
    return self._getitem_Tuple(key)
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 595, in _getitem_Tuple
    self._has_valid_Tuple(tup)
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 106, in _has_valid_Tuple
    if not self._has_valid_type(k, i):
  File "C:\Python27\lib\site-packages\pandas\core\indexing.py", line 1100, in _has_valid_type
    (key, self.obj._get_axis_name(axis)))
KeyError: "[['A', 'B', 'sum']] are not in ALL in the [columns]"
9
Developer

groupby(['A', 'B'])を呼び出したため、AとBは列ではなくなりました。代わりに、両方ともインデックスです。次のようにindex=Falseを省略してみてください。

a.to_csv("test.csv", cols=['sum'])
12
Matt Swain

Excelファイルとして書き込む場合は、次のコマンドを使用します

writer = pd.ExcelWriter('output.xlsx')
data_frame.to_Excel(writer,'Sheet1')
writer.save()
1
Wesam Na