未知专栏' nan'在'字段列表'蟒蛇熊猫

时间:2017-07-30 02:14:25

标签: python mysql pandas

我正在使用pandas (0.20.3)python 3.5.3

我有这样的错误

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

我认为是因为mysql不理解' nan'正在仔细考虑。

根据此article

问题在大熊猫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()

4 个答案:

答案 0 :(得分:1)

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

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

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

原始答案中的其他重要注释:

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

答案 1 :(得分:0)

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]

“修复”数据

答案 2 :(得分:0)

您的数据可能在任何地方都有换行符或转义序列。这被视为' nan'通过MySQL。因此,请手动调整此类情况或使用pandas中的其他代码删除转义字符

答案 3 :(得分:0)

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

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

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