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_csv,read_table, read_excel, read_html, read_sql)