如何将Redshift查询返回的Generator转换为Pandas DataFrame?
将Redshift查询生成器转换为Pandas DataFrame
直接解决方案
wr.redshift.read_sql_query指定chunksize后返回的生成器,每个迭代元素本身就是包含完整字段的Pandas DataFrame分片,只需遍历生成器并拼接所有分片即可:
import awswrangler as wr import pandas as pd iterator = wr.redshift.read_sql_query( sql="my_query_here", con=conn, chunksize=1000 ) # 拼接所有DataFrame分片,保留字段结构 df = pd.concat(iterator, ignore_index=True)
为什么之前的方法报错
你参考的方案是针对产出单行数据的普通生成器,但这里的生成器每次产出的是完整的DataFrame块,直接套用该方法会把DataFrame当成单行数据处理,从而触发b'\x00'这类数据结构不匹配的错误。
内存友好的替代处理
如果数据集过大、内存有限,可以在遍历过程中逐步处理分片,避免一次性拼接占满内存:
processed_chunks = [] for chunk in iterator: # 示例:对分片做预处理(如清洗空值、筛选数据) cleaned_chunk = chunk.dropna(subset=["必填字段"]) processed_chunks.append(cleaned_chunk) # 最终拼接处理后的分片 df = pd.concat(processed_chunks, ignore_index=True)
内容的提问来源于stack exchange,提问作者Luigi Candela
相关产品推荐
相关产品推荐

