Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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_Python 3.x - Fatal编程技术网

Python 导入CSV文件、删除行、导出CSV文件

Python 导入CSV文件、删除行、导出CSV文件,python,python-3.x,Python,Python 3.x,我正在尝试导入、修改然后导出一个CSV文件,以便进行批量交付 基本上,我希望打开该文件,从中删除特定列,检查是否有重复项,如果有,则删除,然后导出到另一个CSV文件 我的代码如下 import csv with open ('book1.csv', 'r') as in_file, open ('ammended.csv', 'w') as out_file: read_file = csv.DictReader(in_file) for row in read_file:

我正在尝试导入、修改然后导出一个CSV文件,以便进行批量交付

基本上,我希望打开该文件,从中删除特定列,检查是否有重复项,如果有,则删除,然后导出到另一个CSV文件

我的代码如下

import csv

with open ('book1.csv', 'r') as in_file,  open ('ammended.csv', 'w') as out_file:
    read_file = csv.DictReader(in_file)

    for row in read_file:
        print(row)
        row.pop('flavour')
        print(row) 
输出-

{'name': 'me', 'address': '34', 'postcode': 'hhhh', 'flavour':'lemon'}
{'name': 'me', 'address': '34', 'postcode': 'hhhh'}
{'name':'me', 'address': '34', 'postcode': 'hhhh', 'flavour': 'lime'}
{'name':'me', 'address': '34', 'postcode': 'hhhh'}
{'name': 'you', 'address':'35', 'postcode': 'hlhl', 'flavour': 'strawberry'} 
{'name': 'you','address': '35', 'postcode': 'hlhl'}

到目前为止,我很高兴它导入并删除了正确的行,但是我如何检查重复行,然后导出到新文件。

我建议您尝试执行任务

要安装熊猫,请在终端中键入:

pip install pandas
在代码中尝试执行以下操作:

import pandas as pd

df = pd.read_csv('book1.csv')   # Reading data
df = df.drop('flavour', axis=1) # Dropping column
df = df.drop_duplicates()       # Removing duplicates
df.to_csv('ammended.csv')       # Saving filtered data

您可以将行添加到列表中,并使用set函数删除重复项:

导入csv
导入json
打开('book.csv','r')作为\u文件:
read\u file=csv.DictReader(在\u文件中)
行列表=[]
对于read_文件中的行:
row.pop(“味道”)
打印(行)
row_list.append(str(row))#将dict转换为字符串以使其可散列
无重复=设置(行列表)#删除重复项
#现在写入一个新文件
打开('output.csv',“w”)作为输出文件:
fieldnames=['name','address','postcode']
writer=csv.DictWriter(输出文件,字段名=字段名)
writer.writeheader()
对于无重复的行:
row=row.replace(“,”)#json需要双引号
writer.writerow(json.loads(row))#将字符串转换为dict(排序)并写入行

编辑:我将答案更改为“实际有效”。很抱歉它之前产生了错误。

谢谢,这非常有用。但是我尝试过,但它抛出了一个类型错误:Unhabable type:“dict”哦,我没有实际测试它。我会很快准备一个csv文件并测试更改的答案。现在应该可以了。效果很好,非常感谢我!很高兴我能帮上忙:)谢谢,这已经奏效了。但是它生成了一个新列,我假设它是列表的索引号。无论如何要删除这些?@BILLYBOB当然,只需将
index=False
添加到
.to_csv()
方法中。例如,在您的例子中:
df.to_csv('ammend.csv',index=False)
非常感谢