为什么在将 Python dict 写入 csv 文件时出现此 "fields not in fieldnames" 错误?

Why do I get this "fields not in fieldnames" error when writing Python dict to csv file?

我收到以下错误:

ValueError: dict contains fields not in fieldnames: 'R', '0', '0', '3'

当我运行这段代码示例时:

import csv
import pandas as pd

df = pd.DataFrame(
    data=[[   0,    0,    2,    5,    0],
          [1478, 3877, 3674, 2328, 2539],
          [1613, 4088, 3991, 6461, 2691],
          [1560, 3392, 3826, 4787, 2613],
          [1608, 4802, 3932, 4477, 2705],
          [1576, 3933, 3909, 4979, 2685],
          [  95,  229,  255,  496,  201],
          [   2,    0,    1,   27,    0],
          [1438, 3785, 3589, 4174, 2215],
          [1342, 4043, 4009, 4665, 3033]],
    index=['05-01-11', '05-02-11', '05-03-11', '05-04-11', '05-05-11',
           '05-06-11', '05-07-11', '05-08-11', '05-09-11', '05-10-11'],
    columns=['R003', 'R004', 'R005', 'R006', 'R007']
)

myDATA=df.to_dict();
header=myDATA.keys()

with open("TestTry.csv", "w") as g:
    writer = csv.DictWriter(g, delimiter=",", fieldnames=header,lineterminator='\r\n')
    writer.writeheader()
    for row in myDATA:
        writer.writerow(row)

我不知道如何克服这个错误!您的帮助将不胜感激。

正如@DeepSpace 所建议的,您可以使用pandas df.to_csvdataframe 保存到csv 文件。

你的代码问题是你必须将dataframe转换为一个列表,其中包含字典元素,如:list like [{column -> value}, ... , {column -> value}],然后你可以循环列表以将带有DictWriter的dict元素写入csv 文件,同时,你也可以添加 indexes ,像这样:

import csv
import pandas as pd

df = pd.DataFrame(
    data=[[   0,    0,    2,    5,    0],
          [1478, 3877, 3674, 2328, 2539],
          [1613, 4088, 3991, 6461, 2691],
          [1560, 3392, 3826, 4787, 2613],
          [1608, 4802, 3932, 4477, 2705],
          [1576, 3933, 3909, 4979, 2685],
          [  95,  229,  255,  496,  201],
          [   2,    0,    1,   27,    0],
          [1438, 3785, 3589, 4174, 2215],
          [1342, 4043, 4009, 4665, 3033]],
    index=['05-01-11', '05-02-11', '05-03-11', '05-04-11', '05-05-11',
           '05-06-11', '05-07-11', '05-08-11', '05-09-11', '05-10-11'],
    columns=['R003', 'R004', 'R005', 'R006', 'R007']
)

myDATA=df.to_dict(orient='records') #Convert DataFrame to dictionary(records) : list like [{column -> value}, ... , {column -> value}] 
header = list(df.columns.values) #get column name ['R003', 'R004', 'R005', 'R006', 'R007']
index = list(df.index) #get index name ['05-01-11', '05-02-11', '05-03-11', '05-04-11', '05-05-11', '05-06-11', '05-07-11', '05-08-11', '05-09-11', '05-10-11']

with open("TestTry.csv", "w") as g:
    writer = csv.DictWriter(g, delimiter=",", fieldnames=['index']+header,lineterminator='\r\n')
    writer.writeheader()
    for i,row in enumerate(myDATA):
        temp_row = row
        temp_row['index'] = index[i] #add index into dict
        writer.writerow(temp_row)