为什么在将 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_csv
将dataframe
保存到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)
我收到以下错误:
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_csv
将dataframe
保存到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)