簡體   English   中英

從json創建的Pandas數據框有未命名的列 - 由於未命名的列問題而無法插入MySQL

[英]Pandas dataframe created from json has unnamed column - can't insert into MySQL due to unnamed column issue

現在我搞亂了一些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,您的目標列名稱作為框架的索引。 也許你可以試試

df = pd.DataFrame.from_dict(l)

注意:如果你可以構建一個dict(或其他一些結構),將所有行轉換為df然后推送到mysql,我認為你會有更好的性能。 這一行一次可能太慢了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM