使用pandas chunksize和postgreSQL时的行数不正确



我在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;

结果:约1500000行

然后,我数了数文件中的行数:约1500020行

每个文件都是一样的。这些值似乎偏离了20-30行。我不确定这怎么可能,因为查询应该像我写的那样传递给DB。我是不是误解了"矮胖"在熊猫身上的作用?是否存在某些块重叠或不完整的可能性?

每个区块都有自己的标题行。您需要为除第一个块之外的所有块设置header=False。或者所有的大块,不管你想要什么。

更好的是,只需直接使用python并绕过panda,那么你就不需要在一开始就分块使用,而且应该更快。