如何用Boto3 Session读取S3 CSV文件并正确解析为DataFrame?
问题分析与解决方案
错误原因
你使用了pd.read_fwf()读取CSV文件,这个函数是专门用于固定宽度格式文本的解析,即便指定了delimiter=',',它的核心逻辑还是按字符宽度拆分内容,这就导致原本的多列CSV被错误合并成少数列。
简洁的Boto3 Resource实现方式
直接复用Boto3 Resource的对象Body流,传给pd.read_csv()即可,写法和Client版本一样简洁:
s3 = session.resource('s3') obj = s3.Object(bucket_name=Buckets, key=filename) df = pd.read_csv(obj.get()['Body'], header=None)
说明
obj.get()['Body']返回的是StreamingBody对象,和Client方式中response.get("Body")的类型一致,pandas的read_csv()可以直接读取这个流对象,无需提前把内容全部读入内存再转成BytesIO。- 保留
header=None参数(和你原代码一致),如果CSV文件有表头,可以去掉这个参数。
内容的提问来源于stack exchange,提问作者PythonDeveloper
相关产品推荐
相关产品推荐

