我是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列的观察值。
答案 0 :(得分:0)
您可以将表名从“ table”更改为其他任何内容,并且代码可以正常工作。这对我有用。
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