首页 > 解决方案 > 如果我通常将“#”作为分隔符但部分作为标题的一部分,我该怎么做才能将 csv 文件正确导入 Python?

问题描述

我要将此csv 文件导入 Python 数据帧,具有分隔符“#{1}”,因此它计为 13 列,但我有几行出现此错误:

“ParserError:第 803 行中预期有 13 个字段,看到 14。错误可能是由于使用多字符分隔符时忽略引号引起的。”

问题是这些令人不安的线看起来像这样 "Revolution#9#9118#"9118"#"350000"#15.11.2002###Thriller/Suspense##""##7,3#252"

其中“Revolution #9”的意思是“Revolution №9”,只是电影的标题,而不是分隔符,尽管程序不理解这一点,因此会计算一个过多的列。老师禁止编辑原始的csv文件来修复它。仅使用代码。

是否有一些代码可以在 Python 中编辑这个 csv 文件,用另一个替换电影标题中的这个标志?或者其他解决这个问题的方法,好吗?

这是我使用的代码,以防万一

import pandas as pd
movies=pd.read_csv('movies.csv', 
                   sep="#{1}",
                   names=["Title", "US Gross", "Worldwide Gross", "Production Budget", "Release Date", "Distributor", "Source", "Major Genre", "Creative Type","Director","Rotten Tomatoes Rating","IMDB Rating","IMDB Votes"],
                   engine='python',
                   skiprows=1)
movies = movies.replace(to_replace='"', value="", regex=True)
movies

标签: pythonpython-3.xcsvdelimiter

解决方案


我认为 csv.DictReader 模块会帮助你。这是一个未经测试的示例如何使用此模块

from csv import DictReader

with open(file_name, 'r') as csv_file:
    fieldnames = ["Title", "US Gross"] # Add all youre rows here
    csv_lines = csv.DictReader(csv_file, fieldnames=fieldnames, delimiter=',')
    for line in csv_lines:
        # Example how to access the column 'Title'
        title = line['Title']
        # here you can replace the content

推荐阅读