我正在使用pandas 'read_csv‘从亚马逊s3存储桶中读取.csv文件。下面是我发布的声明:
xyz = pd.read_csv(io.BytesIO(obj['Body'].read()), dtype={'col1': str ,'col2':int,'col3':int ,'col4':int} ,encoding='latin-1')
这就是我的问题所在;col2包含一些特殊字符,比如“`”,而col3包含“:”。我想保留一个错误数据的日志,并只插入已更正的数据。
如果能帮上忙我会很感激的。
发布于 2018-07-21 07:02:18
首先,您应该知道pandas允许您直接从S3读取内容,例如
xyz = pd.read_csv('s3://bucket/file.csv, dtype={..}, encoding='latin-1')
然而,这并不能解决您的坏数据问题。使用regex分隔符的python解析器引擎可能会拯救您,但似乎不太可能。
最简单的做法是逐行下载文件,并将错误的行放入另一个输出中
s3 = s3fs.S3FileSystem()
with s3.open('bucket/file.csv', 'rb') as fin:
with open('out_good.csv', 'wb') as fgood:
with open('out_bad.csv', 'wb') as fbad:
for line in fin:
if ':' in line or '`' in line:
fbad.write(line)
else:
fgood.write(line)
另一种选择是编写你自己的类似文件的对象来读取行,进行文本解码,并提供read()/readline()方法让pandas工作(我认为它还需要像readable()这样的东西)。
https://stackoverflow.com/questions/51450366
复制相似问题