Python 从json创建的熊猫数据帧具有未命名的列-can';由于未命名列问题,无法插入MySQL

Python 从json创建的熊猫数据帧具有未命名的列-can';由于未命名列问题,无法插入MySQL,python,mysql,json,pandas,dataframe,Python,Mysql,Json,Pandas,Dataframe,现在我正在处理一些JSON数据,我正在尝试将其动态地推送到MySQL数据库中。JSON文件非常庞大,因此我必须使用Python中的yield函数逐行仔细检查它,将每一行JSON转换为small DF并将其写入MySQL。问题是,当我从JSON创建DF时,它会添加索引列。当我向MySQL写东西时,它似乎忽略了index=False选项。代码如下 import gzip import pandas as pd from sqlalchemy import create_engine #stuff

现在我正在处理一些JSON数据,我正在尝试将其动态地推送到MySQL数据库中。JSON文件非常庞大,因此我必须使用Python中的yield函数逐行仔细检查它,将每一行JSON转换为small 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。每次在内部循环中创建dataframe时,我都会看到dataframe有一个值为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,那么您的性能会更好。这一行一次可能太慢了

听起来好像列名与表的数据帧不同。@BobHaffner,您好,我仔细检查了,列完全相同。如果这个专栏不存在,我相信它会让我知道的。我更新了一点问题。好吧,除了你有一个值为0的额外列之外,它们都匹配?你能在你的df.to_sql()之前做一个
打印(df.columns)
吗?@BobHaffner也做了好的,现在更清楚了。您当前有一个框架,其中有一列名为0,您希望使用的列名作为框架的索引。也许您可以尝试
df=pd.DataFrame.from_dict(l)
,或者您可以尝试
df.T.to_sql(name='MyTable',con=engine,如果存在='append',index=False)
在将框架推送到mysql之前先转换框架。注意:我认为如果您可以构建一个dict(或其他结构),将所有行转换为df,然后推送到mysql,那么您的性能会更好。一次一行可能太慢了?