MS-Access и Python - проблема с NaN в базе данных - PullRequest
0 голосов
/ 26 мая 2020

Я изучаю библиотеку pandas. Моя задача - скачать таблицу с сайта, преобразовать и отправить в базу данных - в данном случае в ms-доступ. Я загружаю данные в свой DataFrame.

Моя проблема в том, что выбранная таблица в одном из столбцов (относительно цен) имеет значение '-'. В поисках информации о том, как с этим справиться, я обнаружил 3 основных возможности:

  1. Использование 'заменить' символ '-' на 0. Однако это решение не соответствует моим ожиданиям, потому что значение '-' означает нет данных и не его значение равное 0.
  2. Замена символа '-' пустой строкой - это решение не пройдет, потому что после изменений столбец имеет тип данных - float.
  3. Заменить '-' на NaN с помощью - .replace ('-', np.nan) - Эта возможность наиболее близка к решению моей проблемы, но после загрузки данных в доступ с помощью библиотеки «pyodb c» замененный записи имеют значение «1, # QNAN». Я держу пари, что такой формат принимает доступ для типа NaN, но проблема возникает, когда я хотел бы получить среднее значение из столбца, используя SQL:
sql SELECT AVG (nameColumns) FROM nameTable name

возвращает 'Overflow 'message.

Кто-нибудь знает, что делать с' - '? Есть ли способ, чтобы поле numeri c после загрузки было просто пустым?


EDIT - дополнительный код:

conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=PathToDB;')
cursor = conn.cursor()
for index,row in df.iterrows():
    cursor.execute("INSERT INTO tableName(col1,col2,col3) VALUES (?,?,?)", 
                   row['col1'], row['col2'],row['col3'])
conn.commit()
cursor.close()
conn.close()

EDIT 2 - дополнительный код

import pandas as pd
d ={'col1': [1,2,'-'],'col2':[5,'-',3]}
dfstack = pd.DataFrame(data=d)
dfstack.head()
dfstack = dfstack.replace("-",None)
dfstack.head()

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Вам нужно заменить '-' на None, который, кажется, преобразует его в NULL при вставке с использованием pyodb c:

dfstack = dfstack.where(dfstack!='-', None)
0 голосов
/ 26 мая 2020

Может быть, вы могли бы заменить - ключевым словом None в python? Я не уверен, как работает pyodb c, но SQL игнорирует значения NULL с помощью своей функции AVG, а pyodb c может преобразовать None в NULL.

https://www.sqlservertutorial.net/sql-server-aggregate-functions/sql-server-avg/

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