Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python从csv字典写入csv文件_Python_Pandas_Csv_Export To Csv - Fatal编程技术网

使用python从csv字典写入csv文件

使用python从csv字典写入csv文件,python,pandas,csv,export-to-csv,Python,Pandas,Csv,Export To Csv,我正在尝试从CSV字典编写CSV文件。这比看起来要复杂一点。请更正我的代码,以便获得所需的CSV文件 我的csv文件: id;评论;x;YZ a1;Mv_biw;10;12;3. b1;Ins_slt_po_zd;20;22;5. a2;Mv_biw;25;17;7. a1;Ins_slt_po_zd;35;13;3. a1;Ins_slt_dkz;15;19;9 b1;Mv_biw;65;11;2. b2;Ins_slt_dkz;50;23;1. b2;Mv_biw;75;17;7. 到目前

我正在尝试从CSV字典编写CSV文件。这比看起来要复杂一点。请更正我的代码,以便获得所需的CSV文件

我的csv文件:

id;评论;x;YZ
a1;Mv_biw;10;12;3.
b1;Ins_slt_po_zd;20;22;5.
a2;Mv_biw;25;17;7.
a1;Ins_slt_po_zd;35;13;3.
a1;Ins_slt_dkz;15;19;9
b1;Mv_biw;65;11;2.
b2;Ins_slt_dkz;50;23;1.
b2;Mv_biw;75;17;7.
到目前为止,我的代码是:

import os
import csv
import collections
from csv import DictWriter    

with open(r'C:\incsv_new.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    my_dict = collections.defaultdict(dict)
    for row in reader:
        my_dict[row[0]][row[1]] = [row[2],row[3],row[4]]

print (my_dict)

with open(r'C:\outcsv_new.csv','w', newline='') as wf:
    fieldnames = ['ID','x_Mv_biw', 'y_Mv_biw', 'z_Mv_biw', 'x_Ins_slt_po_zd', 'y_Ins_slt_po_zd', 'z_Ins_slt_po_zd', 'x_Slb_po_zd', 'y_Slb_po_zd', 'z_Slb_po_zd', 'x_Slb_dkz', 'y_Slb_dkz', 'z_Slb_dkz', 'x_Ins_slt_dkz', 'y_Ins_slt_dkz', 'z_Ins_slt_dkz'] 
    my_write = csv.DictWriter(wf, fieldnames = fieldnames, delimiter = ';')
    my_write.writeheader()
所需的输出CSV文件:

id;x_Mv_biw;Yu Mv_biw;z_Mv_biw;x_Ins_slt_po_zd;y_Ins_slt_po_zd;z_Ins_slt_po_zd;x_Slb_po_zd;y_Slb_po_zd;z_Slb_po_zd;x_Slb_dkz;y_Slb_dkz;z_Slb_dkz;x_Ins_slt_dkz;y_Ins_slt_dkz;z_in_slt_dkz
a1;10;12;3.35;13;3;-1;-1;-1;-1;-1;-1.15;19;9
a2;25;17;7;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1.
b1;65;11;2.20;22;5;-1;-1;-1;-1;-1;-1;-1;-1;-1.
b2;75;17;7;-1;-1;-1;-1;-1;-1;-1;-1;-1.50;23;1.

您需要循环查看
my_dict
并为每一行构建字典。还需要为3个元素中的每个元素构造字典键,在这种情况下,
zip()
用于将每个值与
x
y
z
合并:

import os
import csv
import collections
from csv import DictWriter    

with open(r'incsv_new.csv', 'r', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    next(reader)    # skip over the header
    my_dict = collections.defaultdict(dict)

    for row in reader:
        my_dict[row[0]][row[1]] = [row[2], row[3], row[4]]

with open(r'outcsv_new.csv', 'w', newline='') as wf:
    fieldnames = ['ID','x_Mv_biw', 'y_Mv_biw', 'z_Mv_biw', 'x_Ins_slt_po_zd', 'y_Ins_slt_po_zd', 'z_Ins_slt_po_zd', 'x_Slb_po_zd', 'y_Slb_po_zd', 'z_Slb_po_zd', 'x_Slb_dkz', 'y_Slb_dkz', 'z_Slb_dkz', 'x_Ins_slt_dkz', 'y_Ins_slt_dkz', 'z_Ins_slt_dkz'] 
    my_write = csv.DictWriter(wf, fieldnames=fieldnames, delimiter=';', restval=-1)
    my_write.writeheader()

    for id, values in my_dict.items():
        row = {'ID':id}

        for key, values_xyz in values.items():
            for xyz, value in zip("xyz", values_xyz):
                row[f'{xyz}_{key}'] = value

        my_write.writerow(row)
为您提供输出CSV文件:

ID;x_Mv_biw;Yu Mv_biw;z_Mv_biw;x_Ins_slt_po_zd;y_Ins_slt_po_zd;z_Ins_slt_po_zd;x_Slb_po_zd;y_Slb_po_zd;z_Slb_po_zd;x_Slb_dkz;y_Slb_dkz;z_Slb_dkz;x_Ins_slt_dkz;y_Ins_slt_dkz;z_in_slt_dkz
a1;10;12;3.35;13;3;-1;-1;-1;-1;-1;-1.15;19;9
b1;65;11;2.20;22;5;-1;-1;-1;-1;-1;-1;-1;-1;-1.
a2;25;17;7;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1.
b2;75;17;7;-1;-1;-1;-1;-1;-1;-1;-1;-1.50;23;1.

读取时也应跳过标题行。

您会遇到哪些错误?同时链接错误。您必须调用writerow<代码>在我的dict:my_write.writerow(i)@SmartManoj中,请更正我的代码并重写代码。先生们,感谢您采取的行动。您对这个问题有正确的解决方案。这是一个示例CSV文件。实际的CSV文件更大,大约有55列和300行。如果一行为空,是否可以添加?我想在其中添加“-1”。你能更新一下你的例子吗?并显示预期输出。戈莫宁,马丁,是的,我已经更新了预期输出。所有空单元格都获得“-1”值。请查看预期输出。谢谢你,哇。这真是太棒了。再次非常感谢您,祝您度过愉快的一天。