read_csv с использованием dtypes, но в столбцах есть значение [duplicate]

1

Я использовал следующий код для чтения csv, указав типы для каждого col:

clean_pdf_type=pd.read_csv('table_updated.csv',usecols=col_names,dtype =col_types)

Но у него есть ошибка:

ValueError: Integer column has NA values in column 298 

Не знаете, как пропустить НС?

  • 0
    Просто импортируйте без указания типов для столбцов со значениями Null. Он проанализирует нужный вам тип данных, и если этого не произойдет, вы всегда сможете преобразовать его и переписать csv, чтобы не было никаких проблем при будущих чтениях.
  • 0
    @AndreMotta AndreMotta спасибо, не могли бы вы привести пример?
Показать ещё 1 комментарий
Теги:
pandas
csv
dataframe

2 ответа

0
Лучший ответ

Вы не можете иметь значения NaN в серии int dtype. Это невозможно избежать, поскольку значения NaN считаются float:

import numpy as np
type(np.nan)  # float

Лучше всего читать в этих столбцах как float. Если вы затем можете заменить значения NaN значением наполнителя, например 0 или -1, вы можете обработать соответственно и преобразовать в int:

int_cols = ['col1', 'col2', 'col3']
df[int_cols] = df[int_cols].fillna(-1)
df[int_cols] = df[int_cols].apply(pd.to_numeric, downcast='integer')

Альтернатива, имеющих смешанные int и float значения приведет к серии DTYPE object. Это не рекомендуется.

2
clean_pdf_type=pd.read_csv('table_updated.csv',usecols=col_names)
clean_pdf_type = (clean_pdf_type.fillna(0)).astype(col_types)

Как сказано в комментариях, не указывайте тип, удалите NA, а затем переведите его в определенный тип

  • 0
    Быть осторожен. Это будет применяться ко всему фрейму данных. Вероятно, в col_types может быть определено несколько типов.
  • 0
    я знаю, но без дополнительной информации приведение к 0 будет самым простым и быстрым способом поиска конкретных ошибок. Мы могли бы привести NAN в соответствии с типом, но пока у нас есть только целочисленная ошибка. Если есть что-то еще, что поднимает флаг, тогда, конечно, было бы полезно сделать разделение на фрейме данных, чтобы убедиться, что мы не выполняем все одинаковое приведение.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню