python - 用双引号括起来的逗号读取 csv
问题描述
我在 S3 存储桶中有一个 CSV 文件(逗号分隔)。很少有字段有逗号,CSV 文件如下所示:
Q,W,E,R
A,S,"D,F",G
Z,X,C,V
当我在 中阅读此内容时pandas
,我应该在一列中得到 4 列"D,F"
,但我得到了一个额外的列。
我的代码;我尝试了不同的东西,但所有尝试都没有奏效:
import io
import csv
import pandas as pd
#encoding
result = chardet.detect(self.raw_content)
self.encoding = result['encoding']
#csv_delimiter
is being read from the DB ( , in this case)
#max_columns
is NUMBER of columns in the csv file
#reading from s3 bucket
self.raw_content = obj['Body'].read()
content = io.BytesIO(self.raw_content)
#Try 1
df_s3_file = pd.read_csv(content, delimiter=csv_delimiter, engine='python',
dtype=object, encoding=self.encoding, quotechar='"',
names=list(range(0,max_columns)))
#Try 2
df_s3_file = pd.read_csv(content, delimiter=csv_delimiter, engine='python',
dtype=object, encoding=self.encoding, quoting=csv.QUOTE_ALL,
names=list(range(0,max_columns)))
#Try 3
df_s3_file = pd.read_csv(content, delimiter=csv_delimiter, dtype=object,
encoding=self.encoding, quoting=csv.QUOTE_ALL,
names=list(range(0,max_columns)))
当前结果:
0 1 2 4 5
Q W E R NaN
A S "D F" G
Z X C V NaN
预期结果:
0 1 2 4
Q W E R
A S D,F G
Z X C V
解决方案
您可以使用以下代码处理它(在https://stackoverflow.com/a/64456792/5660315之后):
from io import StringIO
import csv
import pandas as pd
s="""
Q,W,E,R
A,S,"D,F",G
Z,X,C,V
"""
df = pd.read_csv(StringIO(s),
names=range(4),
sep=',',
quoting=csv.QUOTE_ALL,
quotechar='"'
)
print(df)
# 0 1 2 3
# 0 Q W E R
# 1 A S D,F G
# 2 Z X C V
推荐阅读
- python - 如何从函数计算值而不返回它们或将它们设置为全局(对于 numba.cuda)?
- dart - forEach 没有预期的过滤
- python - 以 CBC 模式加密时出现错误 3 Python AES 错误
- c# - OnActionExecuting 和 beginexecute 方法有什么区别?
- java - mock-maker-inline 使测试失败,并在非最终非静态类上“传递给 Mockito.mockingDetails() 的 NotAMockException 参数应该是一个模拟”
- sql - SSRS 报告表达式
- xml - 在 Powershell 中从 XML 中获取数据 - Xpath 用法
- javascript - ajax 发布在 chrome 上工作,但在 firefox 和 safari 上不工作
- jquery - 我应该如何在 jQuery 中从 JSON 中获取数据?
- android - 从后台服务启动一个活动并等待它被创建