熊猫to_sql中的dtype引发ValueError

时间:2020-04-05 06:06:51

标签: python pandas sqlite csv

我能够使用以下代码在python中使用熊猫将CSV数据成功写入SQLite:

df = pandas.read_csv(path + '/issues.csv')
df.to_sql('issues', connection, if_exists='replace', index=False)

但是,我想将一列定义为整数,并在尝试使用此代码时根据文档定义:

df = pandas.read_csv(path + '/issues.csv')
df.to_sql('issues', connection, if_exists='replace', index=False, dtype={"severity_int": sqlalchemy.types.Integer()})

我收到一个错误:

File "/usr/local/lib/python3.7/site-packages/pandas/io/sql.py", line 1722, in to_sql
    raise ValueError(f"{col} ({my_type}) not a string")
ValueError: severity_int (INTEGER) not a string

我认为我做对了,但不知道错误在哪里。

2 个答案:

答案 0 :(得分:0)

我认为您需要将所有列都转换为字符串。试试这个:

enter code here

答案 1 :(得分:0)

我不知道错误在哪里

没问题。我在源文件中查找了引发错误的位置,并且仅当传递的dtype不是字符串时才会出现此问题,如错误消息所述。

if dtype is not None:
  for col, my_type in dtype.items():
    if not isinstance(my_type, str): #Right here!
      raise ValueError(
        "{column} ({type!s}) not a string".format(
          column=col, type=my_type
        )
      )

我还查看了文档,看到它们导入了类型,而不是像您那样编写。首先尝试一下方式:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html

from sqlalchemy.types import Integer

df.to_sql('integers', con=engine, index=False, dtype={"A": Integer()})
                                                          #^ Right here