现在我搞乱了一些JSON数据,我正试图将其推送到MySQL数据库中。 JSON文件非常庞大,因此我必须使用Python中的yield函数逐行仔细检查它,将每个JSON行转换为小型pandas DF并将其写入MySQL。问题是,当我从JSON创建DF时,它会添加索引列。而且当我向MySQL写东西时它似乎忽略了index = False选项。代码
import gzip
import pandas as pd
from sqlalchemy import create_engine
#stuff to parse json file
def parseJSON(path):
g = open(path, 'r')
for l in g:
yield eval(l)
#MySQL engine
engine = create_engine('mysql://login:password@localhost:1234/MyDB', echo=False)
#empty df just to have it
df = {}
for l in parseJSON("MyFile.json"):
df = pd.DataFrame.from_dict(l, orient='index')
df.to_sql(name='MyTable', con=engine, if_exists = 'append', index=False)
我收到错误:
OperationalError: (_mysql_exceptions.OperationalError) (1054, "Unknown column '0' in 'field list'")
我缺少什么想法?或者有办法绕过这些东西吗?
UPD。我看到每次在内循环中创建数据帧时,数据帧都有一个未命名的列,其值为0。
以下是有关DF的一些信息:
df
Out[155]:
0
reviewerID A1C2VKKDCP5H97
asin 0007327064
reviewerName Donna Polston
helpful [0, 0]
unixReviewTime 1392768000
reviewText love Oddie ,One of my favorite books are the O...
overall 5
reviewTime 02 19, 2014
summary Wow
print(df.columns)
RangeIndex(start=0, stop=1, step=1)
答案 0 :(得分:2)
您当前有一个框架,其中一列名为0,您的预期列名称作为框架的索引。也许你可以试试
df = pd.DataFrame.from_dict(l)
注意:如果您可以构建一个dict(或其他一些结构),将所有行转换为df然后推送到mysql,我认为你会有更好的性能。这一行一次可能太慢