【发布时间】:2022-01-09 01:16:16
【问题描述】:
我对 pandas 'chunksize' 参数有一个莫名其妙的问题。 我在 python 中编写了一个程序,它遍历一组值并基于它们创建查询。 此数据需要写入 .csv 文件并发送给同事。 这些查询的结果很大,所以.csv需要逐块写入。
查看以下代码:
values = [col1, col2, col3]
for col in values:
sql_query = "SELECT " + col + " other columns..." + " from big_table WHERE some condition..."
for chunk in pd.read_sql(sql_query, conn, chunksize = 80000):
chunk.to_csv(output_path + 'filename.csv', index=False, mode = 'a')
起初,我认为这个程序可以正常工作,因为文件写入没有问题。 我决定做一个基本的完整性检查——比较原始查询中的行数与文件中的行数。他们不匹配。
我输入了 sql_query,但使用 count(*),直接进入数据库,如下所示:
SELECT count(*) from big_table WHERE some condition;
结果:~1,500,000 行
然后,我统计了文件中的行数:~1,500,020 行
这对每个文件都是一样的。似乎这些值偏离了 20 - 30 行。我不确定这是怎么可能的,因为查询应该完全按照我编写的方式传递给数据库。我是否误解了“块大小”在熊猫中的工作原理?是否有可能某些块重叠或不完整?
【问题讨论】:
-
CSV文件中的换行?尝试将文件写回一个空表,看看你得到了什么?
标签: python pandas postgresql