在Pandas中读取包含逗号和双引号内的撇号的CSV文件时遇到问题
在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
在使用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中读取包含逗号和撇号的字段时可能出现的问题。希望本文对你有帮助!