将数据帧连接到MySQL的Python - 与NaN [mysql-connector]

时间:2015-05-01 03:57:54

标签: python mysql pandas mysql-connector

我正在使用Python将一些pandas数据框中的列插入到MySQL中。我使用熊猫15.2。和mysql.connector。

import mysql.connector
cte = mysql.connector.connect(user=xxxxxxxxx, password=xxxxxxx, host=xxxxxx)
cursor = cte.cursor()

for index, row in pets.iterrows():
    home_pets = (row['cats'], row['dogs'], row['goldfish'], row['rabbits'], row['mice'], row['parrots'])   
    add_pets = """  
                            INSERT INTO pets 
                            (cats, dogs, goldfish, rabbits, mice, parrots) 
                            VALUES (%s, %s, %s, %s, %s, %s)
                 """
    cursor.execute(add_pets, home_pets)
    cte.commit()

我的一个整数列中包含NaN'其中的价值观。我刚刚添加了这个,因为一切正常,我确定这是导致问题的列。这是一个varchar(5)(是int(5))列,未设置为" NOT NULL"。
编辑:此列(鹦鹉)包含数字0到5作为响应。它还有" NaN"被访者没有回答这个问题。

尝试在表格中插入数据时,我收到以下错误消息:

ProgrammingError                          Traceback (most recent call last)
<ipython-input-54-59a05bb50318> in <module>()
      6                                 VALUES (%s, %s, %s, %s, %s, %s)
      7                      """
----> 8     cursor.execute(add_pets, home_pets)
      9     cte.commit()

C:\Python27\lib\site-packages\mysql\connector\cursor.pyc in execute(self,     operation, params, multi)
    505             self._executed = stmt
    506             try:
--> 507                 self._handle_result(self._connection.cmd_query(stmt))
    508             except errors.InterfaceError:
    509                 if self._connection._have_next_result:  # pylint: disable=W0212

C:\Python27\lib\site-packages\mysql\connector\connection.pyc in cmd_query(self, query)
    720         if not isinstance(query, bytes):
    721             query = query.encode('utf-8')
--> 722         result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
    723 
    724         if self._have_next_result:

C:\Python27\lib\site-packages\mysql\connector\connection.pyc in _handle_result(self, packet)
        638             return self._handle_eof(packet)
        639         elif packet[4] == 255:
    --> 640             raise errors.get_exception(packet)
        641 
        642         # We have a text result set

ProgrammingError: 1054 (42S22): Unknown column 'nan' in 'field list'

我看到了这个问题,但他们没有使用mysql.connector。 Python Pandas write to sql with NaN values

我更喜欢将int列保留为int,如果可能的话不必将其更改为object(然后每次我从MySQL数据库中将数据读入Python时来回。这可能吗?感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您已将add_pets查询放入docstring中,以进行特殊注释,这可能是您遇到的问题。将其切换为普通引号可以解决此问题。

add_pets = "INSERT INTO pets (cats, dogs, goldfish, rabbits, mice, parrots) VALUES (%s, %s, %s, %s, %s, %s)"