【问题标题】:Incorrect number of rows when using pandas chunksize and postgreSQL使用 pandas chunksize 和 postgreSQL 时的行数不正确
【发布时间】: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


【解决方案1】:

每个块都有自己的标题行。您需要为除第一个以外的所有块设置 header=False。或者对于所有块,随心所欲。

更好的是,直接使用python绕过pandas,一开始就不需要分块做,应该会快很多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2022-01-05
    • 2013-01-19
    • 2023-03-24
    • 2012-02-28
    • 1970-01-01
    • 2019-10-21
    相关资源
    最近更新 更多