在Pandas中读取包含逗号和双引号内的撇号的CSV文件时遇到问题

15 浏览
0 Comments

在Pandas中读取包含逗号和双引号内的撇号的CSV文件时遇到问题

我在从CSV文件中读取一些混乱的字符串数据到DataFrame方面遇到了很大的困难。

我使用的是Python 3.8.5和Pandas 1.1.3。

我的CSV文件包含整数、日期和用双引号"包围的字符串。前几行的示例是:

使用pd作为Pandas的实例,如下所示:

import pandas as pd
import csv
myfilename = 'Input.csv'
myexpenses = pd.read_csv(myfilename, skipinitialspace=True, quotechar='"', quoting=csv.QUOTE_ALL)

但是一直给我报错:

ParserError: Error tokenizing data. C error: Expected 37 fields in line 3, saw 42

显然是因为实际上有41个逗号分布在37个字段上。我不确定为什么这些逗号没有被quotechar语句处理。

我该如何将这些字符串作为单个字段条目处理?

我可能尝试了十几种不同的调整,例如这个这个这个等等。

这些尝试包括调整变量,例如quoting=csv.QUOTE_ALL,但都没有结果。

我需要使用正则表达式吗?

非常感谢您的帮助 - 提前致谢。

编辑:添加了完整的代码。对于那些问的人,这是CSV文件的列和前五个条目行:

日期,员工,项目,费用,描述,单位,费用率,费用金额,标记%,收费金额,可计费,账单状态,提交状态,审核人,可报销,已支付,支付日期,收入账户,费用账户,类别,国家,购买税率,额外,Tax1%,Tax2%,Tax3%,信用卡,支票号码,供应商账单号,发票号码,客户,附件,备注,创建者,创建日期,最后更新者,最后更新

8/27/2021,"姓, 名","2021-123 - Bob & Bob (Bob's - New York, NY) 项目 - 支持",餐饮费:项目餐饮,餐饮,1,43.64,43.64,0,43.64,True,未记账,未提交,,False,False,8/27/2021,,,餐饮-项目,美元,0,False,0,0,0,1234-56 - 姓 - 1234,,,,"Bob & Bob, Inc.",1,,"姓, 名",8/27/2021,"姓, 名",8/27/2021

8/27/2021,"姓, 名","2021-123 - Bob & Bob (Bob's - New York, NY) 项目 - 支持",汽车费用:燃料,燃料,1,29.41,29.41,0,29.41,True,未记账,未提交,,False,False,8/27/2021,,,燃料,美元,0,False,0,0,0,1234-56 - 姓 - 1234,,,,"Bob & Bob, Inc.",1,,"姓, 名",8/27/2021,"姓, 名",8/27/2021

8/27/2021,"姓, 名","2021-123 - Bob & Bob (Bob's - New York, NY) 项目 - 支持",机票费用:航班,机票,1,658.4,658.4,0,658.4,True,未记账,未提交,,True,False,8/27/2021,,,航班,美元,0,False,0,0,0,,,,,"Bob & Bob, Inc.",1,,"姓, 名",8/27/2021,"姓, 名",8/27/2021

8/26/2021,"姓, 名","2021-123 - Bob & Bob (Bob's - New York, NY) 项目 - 支持",餐饮费:项目餐饮,餐饮,1,32.28,32.28,0,32.28,True,未记账,未提交,,False,False,8/26/2021,,,餐饮-项目,美元,0,False,0,0,0,1234-56 - 姓 - 1234,,,,"Bob & Bob, Inc.",1,,"姓, 名",8/27/2021,"姓, 名",8/27/2021

8/26/2021,"姓, 名","2021-123 - Bob & Bob (Bob's - New York, NY) 项目 - 支持",餐饮费:项目餐饮,餐饮,1,6.58,6.58,0,6.58,True,未记账,未提交,,False,False,8/26/2021,,,餐饮-项目,美元,0,False,0,0,0,1234-56 - 姓 - 1234,,,,"Bob & Bob, Inc.",1,,"姓, 名",8/27/2021,"姓, 名",8/27/2021

0
0 Comments

在使用Pandas读取CSV文件时,如果文件中的双引号内包含逗号和撇号,可能会导致读取出现问题。下面将介绍出现这个问题的原因以及解决方法。

问题原因:

当CSV文件中的字段需要使用双引号括起来时,如果这些字段内部包含逗号和撇号,Pandas默认将其视为分隔符,从而导致数据被错误地拆分成多个字段。这会导致读取数据时出现错误。

解决方法:

一种解决方法是使用csv模块的QUOTE_NONE参数来读取CSV文件。具体代码如下:

import pandas as pd
import csv
myexpenses = pd.read_csv(myfilename, csv.QUOTE_NONE)

使用csv.QUOTE_NONE参数可以告诉Pandas不要将双引号内的逗号和撇号视为分隔符,而是将其作为字段的一部分。这样就可以正确读取包含逗号和撇号的字段。

通过以上的方法,我们可以解决在Pandas中读取包含逗号和撇号的字段时可能出现的问题。希望本文对你有帮助!

0