【问题标题】:Pandas TypeError: sequence item 0: expected str instance, dict found when using to_sqlPandas TypeError:序列项0:预期的str实例,使用to_sql时找到的dict
【发布时间】:2018-07-12 11:50:50
【问题描述】:

我正在尝试将数据框导出到 mysql 数据库中。我通过 Order and Inventory API 调用获取数据。

我已经成功地将 Order 和 Inventory API 调用保存到数据框中,并将 Order 数据框导出到 MySQL 表中。

然而,库存数据框向我抛出了错误:

TypeError: sequence item 0: expected str instance, dict found

我不确定我做错了什么,我怀疑库存的数据框在许多列中包含很多嵌套的 json,但不知道该怎么做。

这是我目前的库存代码:

import pandas as pd

#python libary to compare today date for birthday lists.
import numpy as np
import datetime as dt
import datetime
from pandas.io.json import json_normalize
from pandas.io import sql
import pymysql.cursors
import json
import pymysql
import pandas.io.sql
from sqlalchemy import create_engine

headers_inventory = {
    'Accept': '',
    'Content-Type': '',
    'x-api-key': '',
    'x-organization-id': '',
    'x-facility-id': '',
    'x-user-id': '',
}

r_inventory = requests.get(' URL', headers=headers_inventory, verify=False)

data = json.loads(r_inventory.text)
df_inventory = json_normalize(data)
print (df_inventory)

engine = create_engine('mysql+pymysql://USERNAME:PWD@HOST:3306/DB')
df_inventory.to_sql("inventory", engine, if_exists="replace", index = False)

以下是数据框 dtypes 的内容:

int64 
object
float64

【问题讨论】:

    标签: python-3.x sqlalchemy pymysql


    【解决方案1】:

    将整个 df 转换为字符串有助于使用此行:

    df = df.applymap(str)
    

    【讨论】:

    • df = df.astype(str) 应该更快。
    【解决方案2】:

    在使用会计年度运行数据透视表时遇到了类似的问题。问题如上所述,Python 3 似乎没有将数字识别为一个类别。您必须将该系列变成一个字符串(即将 2007、2008 更改为 FY2017、FY2018)。或者,只需将该列更改为字符串,而不是整个 df ( df.column.astype(str) )。

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2022-10-18
      • 2019-07-24
      • 2017-06-05
      相关资源
      最近更新 更多