现在我正在处理一些 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'")
知道我遗漏了什么吗?还是有办法解决这个问题?
更新。每次我在内部循环中创建数据框时,我都会看到数据框有一个值为 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,您的预期列名称作为框架的索引。或许你可以试试
df = pd.DataFrame.from_dict(l)
注意:我认为如果您可以构建一个 dict(或其他一些结构),将所有行转换为 df,然后推送到 mysql,您的性能会好得多。一次一行可能太慢了
关于python - 从 json 创建的 Pandas 数据框具有未命名列 - 由于未命名列问题无法插入 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43462764/