pandas read_sql 没有读取所有行

Posted

技术标签:

【中文标题】pandas read_sql 没有读取所有行【英文标题】:pandas read_sql not reading all rows 【发布时间】:2016-06-20 21:02:48 【问题描述】:

我正在通过 pandas 的 read_sql 和外部应用程序 (DbVisualizer) 运行完全相同的查询。

DbVisualizer 返回 206 行,而 pandas 返回 178。

我已经尝试根据How to create a large pandas dataframe from an sql query without running out of memory?提供的信息通过chucks从pandas读取数据,但没有改变。

这可能是什么原因以及解决方法?

查询:

select *
from rainy_days
where year=’2010’ and day=‘weekend’

这些列包含:日期、年份、工作日、当天的降雨量、温度、geo_location(每个位置的行)、风力测量值、前一天的降雨量等。

确切的python代码(减去连接细节)是:

import pandas
from sqlalchemy import create_engine

engine = create_engine(
   'postgresql://user:pass@server.com/weatherhist?port=5439',
)

query = """
        select *
        from rainy_days
        where year=’2010’ and day=‘weekend’
        """
df = pandas.read_sql(query, con=engine)

【问题讨论】:

你使用了奇怪的引号(对于year=’2010’),我不知道这是否是一个原因,但你可以用普通的单引号替换它们吗? (') 有解决办法吗?我正在运行同样的问题。 同样的问题。我有一个总共 7 行的表,pandas.read_sql_table 有 7 行,但 pandas.read_sql 有 5 行。 【参考方案1】:

https://github.com/xzkostyan/clickhouse-sqlalchemy/issues/14

如果你使用纯 engine.execute 你应该手动关心格式

【讨论】:

【参考方案2】:

什么对我有用:

    删除索引 将整个内容导出到 csv:

    删除所有行:

    从表中删除

    将 csv 重新导入

    重建索引

我认为如果我使用 pandas 会更快:

df = read_csv(..)
df.to_sql(..)

我认为这对于 x mm 行的表应该很容易工作,但是对于非常大的表可能会很慢。

【讨论】:

奇怪的引号 `` 在 SQL 中用于区分字段名和保留字,例如选择`right` FROM ...

以上是关于pandas read_sql 没有读取所有行的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用 Python Pandas 读取所有行直到遇到空行

Pandas read_sql 列不正确

pd.read_sql字符类型

pandas 清洗 MySQL 数据

pandas读写结构化数据(read_csv,read_table, read_excel, read_html, read_sql)

Pandas只提供了读取啥文件的函数?