【问题标题】:Unknown column 'nan' in 'field list' python pandas“字段列表”python pandas中的未知列“nan”
【发布时间】:2018-01-05 20:03:46
【问题描述】:

我正在使用pandas (0.20.3)python 3.5.3

我有这样的错误

mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column 'nan' in 'field list'

我认为是因为 mysql 不理解 'nan' 作为 mull。

据此article

问题已在 pandas 0.15.0 中修复

但是我仍然有这个错误。我的线有问题吗??

或者我应该在哪里解决??

stocksDf = pd.read_csv('companys.csv', names=['name','place'])

for i,row in stocksDf.iterrows():
    sql = "insert into CompanyUs(name,place) VALUES(%s,%s)" 
    data = (row['name'],row['place'])
    cur.execute(sql,data)
    pprint("Company Write : %s" % row['name'])
    conn.commit()

【问题讨论】:

  • 你使用的不是pandas中的to_sql,而是其他MYSQL API中的execute,所以与参考文章的情况不一样,与@987654329的版本无关@。 stocksDf = stocksDf.astype(object).where(pd.notnull(stocksDf), None) 可能会有所帮助。
  • @Huang 好答案!
  • @Huang 非常感谢!它对我有用!

标签: python mysql pandas


【解决方案1】:

问题中链接的文章是指您未在代码中使用的 DataFrame.to_sql() 。如果您想保持这种写入数据库的方式,您需要更改 DataFrame 中的NaNs:

this question 中所述,解决方案是将所有NaN 值更改为None

stocksDf = stocksDf.where((pd.notnull(stocksDf)), None)

原始答案的进一步重要注释:

这会将所有列的 dtype 更改为 object

【讨论】:

  • 谢谢,整个下午我都在为这个错误而苦苦挣扎。你的代码修正了我的错误。
【解决方案2】:

Pandas read_csv 函数可以将(至少)两种类型的空值放入您的数据中,numpy.float64('nan')numpy.nan。在某些情况下,一种是可以接受的,另一种是不能接受的。这听起来像是其中一种情况。使用调试器确定数据的type() 是什么。然后,您可以使用 (DataFrame.replace)[http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html#pandas-dataframe-replace]

“修复”数据

【讨论】:

    【解决方案3】:

    您的数据可能在任何地方都有换行符或转义序列。这被 MySQL 视为“nan”。所以手动调整这种情况或使用 pandas 的另一段代码来删除 转义字符

    【讨论】:

      【解决方案4】:

      我也看到了这个错误。 如果在除以零的函数中计算 NaN,则将其分配给 Double 变量。 当尝试将此值存储到数据库时,它会返回该错误。 解决方案:

      在除以零之前添加一个 if 子句:

      if (value2 = 0) then
      {CalValue = 0}
      else
      {Calcvalue = 20/value2}
      

      【讨论】:

        猜你喜欢
        • 2016-01-01
        • 2018-03-12
        • 2018-06-23
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-02
        • 2022-01-06
        相关资源
        最近更新 更多