#python #pandas #dataframe #fillna
#python #pandas #фрейм данных #fillna
Вопрос:
Обновление: кажется, из-за .loc , если я использую исходный df из pd.read_excel, все в порядке.
У меня есть фрейм данных с Dtypes следующим образом.
Это csv для файла dataframe: CSV
Date datetime64[ns] Amout float64 Идентификатор объекта Currency объект
Я использовал следующий код для замены NaT, NaN
a=np.datetime64('2000-01-01')
values={'Date':a,'Amount':0,'Currency':'0','ID':'0'}
df.fillna(value=values,inplace=True)
Однако я получил ошибку: ошибка типа: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс.
Я также попытался заполнить каждый столбец и не увидел сообщения об ошибке, но Nan и Nat по-прежнему остаются неизменными.
a=np.datetime64('2000-01-01')
df[['Date']].fillna(a,inplace=True)
df[['Amount']].fillna(0,inplace=True)
df[['Currency']].fillna('0',inplace=True)
df[['ID']].fillna('0',inplace=True)
Мне это кажется очень странным, поскольку я успешно использовал fillna много раз.
Пожалуйста, дайте мне совет. Большое вам спасибо.
Комментарии:
1. Можете ли вы предоставить образец csv в текстовом формате вместо изображения?
2. Я только что добавил ссылку на csv-файл в верхней части моего сообщения.
3. Я пытался прочитать ваш csv, но не могу воспроизвести ошибку. На моей стороне он работает, как и ожидалось, с вашим кодом —
df.fillna(value=values,inplace=True)
Ответ №1:
Я думаю NaN
, что в Currency
столбцах и есть строки Id
, поэтому используйте:
df = df.replace({'Currency': {'NaN': '0'}, 'ID':{'NaN': '0'}})
Комментарии:
1. Спасибо. Я попробую ваш путь. Но я все еще удивляюсь, почему он выдал сообщение об ошибке, когда я попробовал первый метод.
2. Я пробовал, и это не сработало. Я только что добавил ссылку на csv-файл в верхней части моего сообщения. Можете ли вы взглянуть на это?