dtype в pandas to_ sql повышает ValueError - PullRequest
0 голосов
/ 05 апреля 2020

Я могу успешно записать данные CSV в SQLite, используя pandas в python, используя этот код:

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 голосов
/ 05 апреля 2020

Я не знаю, где ошибка

Нет проблем. Я посмотрел в исходном файле, где выдается ваша ошибка, и проблема возникает только тогда, когда переданный 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
0 голосов
/ 05 апреля 2020

Я думаю, что вам нужно преобразовать все столбцы в строку. попробуйте это:

df = df.astype(str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...