我正在使用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()
答案 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}