pandas.read_csv读取CSV时忽略引号内逗号的问题求助
问题描述
将CSV文件导入pandas DataFrame时,引号内的逗号未被正确忽略,导致字段被错误拆分。尝试调整quotechar参数后仍无效果。
原代码
import csv import pandas df = pandas.read_csv( 'test_quote.csv', header=None,sep=',', quotechar='\"', quoting=csv.QUOTE_MINIMAL, encoding='ascii', engine='python') print(df)
实际输出
$ python3 test_quote.py 0 1 2 3 4 5 6 0 201571 2080 "December 2 2022" "November 1 - November 30 2022" 487.29 1 345741 5377 "December 3 2022" "November 1 - November 30 2022" 729.35 2 995349 3672 "December 2 2022" "November 1 - November 30 2022" 937.33 3 475601 3672 "December 2 2022" "November 1 - November 30 2022" 790.17 4 228548 3672 "December 7 2022" "November 1 - November 30 2022" 682.38
期望输出
$ python3 test_quote.py 0 1 2 3 4 0 201571 2080 "December 2, 2022" "November 1 - November 30, 2022" 487.29 1 345741 5377 "December 3, 2022" "November 1 - November 30, 2022" 729.35 2 995349 3672 "December 2 , 2022" "November 1 - November 30 , 2022" 937.33 3 475601 3672 "December 2 , 2022" "November 1 - November 30 , 2022" 790.17 4 228548 3672 "December 7, 2022" "November 1 - November 30, 2022" 682.38
CSV文件内容(test_quote.csv)
201571, 2080, "December 2, 2022", "November 1 - November 30, 2022", 487.29 345741, 5377, "December 3, 2022", "November 1 - November 30, 2022", 729.35 995349, 3672, "December 2 , 2022", "November 1 - November 30 , 2022", 937.33 475601, 3672, "December 2 , 2022", "November 1 - November 30 , 2022", 790.17 228548, 3672, "December 7, 2022", "November 1 - November 30, 2022", 682.38
解决方案
问题出在两个关键点:
quotechar参数错误使用了HTML转义格式\",在Python字符串中直接用'"'即可表示双引号;- CSV中每个逗号后都带有空格,需要开启
skipinitialspace=True来跳过字段开头的空格,避免字段被错误分割。
修改后的代码:
import csv import pandas df = pandas.read_csv( 'test_quote.csv', header=None, sep=',', quotechar='"', quoting=csv.QUOTE_MINIMAL, encoding='ascii', engine='python', skipinitialspace=True ) print(df)
执行后即可得到符合期望的输出,引号内的逗号会被正确忽略,字段不会被错误拆分。
内容的提问来源于stack exchange,提问作者craig
相关产品推荐
相关产品推荐

