【问题标题】:Creating Data Frame From Database Query in Python在 Python 中从数据库查询创建数据框
【发布时间】:2019-03-23 01:11:39
【问题描述】:

我对 python 很陌生,在网上阅读了几篇文章后,我不知道如何继续。我有一个 3.56 gig CSV 文件,我正在尝试使用 python 中的 pandas 和 sqlalchemy 包将其子集到多个数据帧中。

我使用以下代码将 CSV 文件转换为数据库,现在我正在尝试查询数据库并将结果存储在名为 test 的数据框中。但是,每当我执行底部的代码时,都会出现以下错误:OperationalError: (sqlite3.OperationalError) near "table": syntax error [SQL: 'SELECT COL1, COL6, COL7 FROM table where COL1 = 2001'] (Background on this error at: http://sqlalche.me/e/e3q8) 我还尝试通过在 SQL 查询中使用 "SELECT* FROM table where COL1 = 2000" 来选择数据库中的所有列。但是,它返回相同的错误。

import pandas as pd
from sqlalchemy import create_engine

file = "/Users/benalbert/Desktop/Econ522/usa_00001.csv"

csv_database = create_engine("sqlite:///csv_database.db")
chunksize = 1000
i = 0
j = 1
for df in pd.read_csv(file, chunksize=chunksize, iterator=True):
      df = df.rename(columns={c: c.replace(' ', '') for c in df.columns}) 
      df.index += j
      i+=1
      df.to_sql('table', csv_database, if_exists='append')
      j = df.index[-1] + 1

test = pd.read_sql_query('SELECT COL1, COL6, COL7 FROM table where COL1 = 
2001', csv_database)

当第 1 列的值为 2001 时,所需的输出是仅包含来自第 1、6 和 7 列的观测值的新数据框。

【问题讨论】:

  • 愚蠢的问题:你的桌子真的叫“桌子”吗?

标签: python database pandas subset


【解决方案1】:

您可以将表名从“表”更改为其他任何名称,代码可以正常工作。这对我有用。

import pandas as pd
from sqlalchemy import create_engine

file = "arandomlargefileIhad.csv"

csv_database = create_engine("sqlite:///csv_database.db")
cnx = csv_database.raw_connection()

chunksize = 1000
i = 0
j = 1
for df in pd.read_csv(file, chunksize=chunksize, iterator=True):
      df.index += j
      i+=1
      df.to_sql('random', csv_database, if_exists='append')
      j = df.index[-1] + 1

sql_statement = "SELECT * FROM random"
test = pd.read_sql_query(sql_statement, csv_database) #this works
test2 = pd.read_sql_query(sql_statement, cnx) #so does this

【讨论】:

    猜你喜欢
    • 2020-05-03
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多