У меня есть датафрейм, как показано ниже
itm Date Amount
67 420 2012-09-30 00:00:00 65211
68 421 2012-09-09 00:00:00 29424
69 421 2012-09-16 00:00:00 29877
70 421 2012-09-23 00:00:00 30990
71 421 2012-09-30 00:00:00 61303
72 485 2012-09-09 00:00:00 71781
73 485 2012-09-16 00:00:00 NaN
74 485 2012-09-23 00:00:00 11072
75 485 2012-09-30 00:00:00 113702
76 489 2012-09-09 00:00:00 64731
77 489 2012-09-16 00:00:00 NaN
Когда я пытаюсь применить функцию к столбцу Amount, я получаю следующую ошибку.
ValueError: cannot convert float NaN to integer
Я попытался применить функцию с помощью .isnan из математического модуля. Я попробовал атрибут .replace pandas. Я попробовал атрибут .sparse data из pandas 0.9. Я также попробовал, если в функции был NaN == оператор NaN. Я также посмотрел эту статью. Как заменить значения NA нулями в кадре данных R? глядя на некоторые другие статьи. Все методы, которые я пробовал, не работали или не распознают NaN. Любые советы или решения будут оценены.
Ответы:
Я верю,
DataFrame.fillna()
что сделаю это для вас.Ссылка на Документы для блока данных и для Серии .
Пример:
Чтобы заполнить NaN только в одном столбце, выберите только этот столбец. в этом случае я использую inplace = True, чтобы фактически изменить содержимое df.
РЕДАКТИРОВАТЬ:
Чтобы избежать
SettingWithCopyWarning
, используйте встроенную функцию, специфичную для столбцов:источник
df[1]
это представление, а не копия оригинального DF? Очевидно, что если есть редкая ситуация, когда это копия, это может вызвать очень неприятную ошибку. Есть ли четкое утверждение об этом в документации панд?Не гарантируется, что нарезка возвращает представление или копию. Ты можешь сделать
источник
Вы можете использовать
replace
для измененияNaN
на0
:источник
NaN
? или это также заменит значение гдеNA
илиNaN
какdf.fillna(0)
? Я ищу решение, которое заменяет только ценность там, где есть,NaN
а неNA
NaN
то есть значения гдеnp.isnan
TrueЯ просто хотел представить немного обновления / особого случая, так как похоже, что люди все еще приходят сюда. Если вы используете мультииндекс или иным образом индекс-слайсер, опции inplace = True может быть недостаточно для обновления выбранного слайса. Например, в мультииндексе уровня 2x2 это не изменит никаких значений (для панд 0,15):
«Проблема» в том, что объединение в цепочку нарушает возможность обновления исходного кадра данных. Я поставил «проблему» в кавычки, потому что есть веские причины для дизайнерских решений, которые привели к тому, что в определенных ситуациях не интерпретируются через эти цепочки. Кроме того, это сложный пример (хотя я действительно столкнулся с ним), но то же самое может относиться к меньшему количеству уровней индексов в зависимости от того, как вы разрезаете.
Решением является DataFrame.update:
Это одна строка, которая читается достаточно хорошо (вроде) и устраняет все ненужные путаницы с промежуточными переменными или циклами, позволяя вам применять fillna к любому многоуровневому слайсу, который вам нравится!
Если кто-то может найти места, где это не работает, пожалуйста, напишите в комментариях, я возился с этим и смотрю на источник, и это, кажется, решает, по крайней мере, мои проблемы с многоиндексными срезами.
источник
Код ниже работал для меня.
источник
Простой способ заполнить пропущенные значения: -
заполнение строковых столбцов: когда в строковых столбцах отсутствуют значения и значения NaN.
заполнение числовых столбцов: когда числовые столбцы имеют пропущенные значения и значения NaN.
заполнение NaN с нуля:
источник
Вы также можете использовать словари для заполнения значений NaN определенных столбцов в DataFrame, а не для заполнения всех DF одним значением.
источник
Учитывая, что конкретный столбец
Amount
в приведенной выше таблице имеет целочисленный тип. Следующее будет решением:Точно так же вы можете заполнить его различными типами данных, например
float
,str
и так далее.В частности, я хотел бы рассмотреть тип данных для сравнения различных значений одного и того же столбца.
источник
Заменить значения в пандах
если
inplace = False
вместо обновления df (dataframe) он вернет измененные значения.источник
Если вы должны были преобразовать его в фрейм данных Pandas, вы также можете сделать это с помощью
fillna
.Это вернет следующее:
источник
Есть два варианта, доступных в первую очередь; в случае вменения или заполнения пропущенных значений NaN / np.nan только числовыми заменами (по столбцу (столбцам)):
df['Amount'].fillna(value=None, method= ,axis=1,)
достаточно:Из документации:
value: скаляр, dict, Series или DataFrame Значение, используемое для заполнения отверстий (например, 0), поочередно dict / Series / DataFrame значений, указывающих, какое значение использовать для каждого индекса (для Series) или столбца (для DataFrame) , (значения, не указанные в dict / Series / DataFrame, заполняться не будут). Это значение не может быть списком.
Это означает, что «строки» или «константы» больше не могут быть вменены.
Для более специализированных расчетов используйте SimpleImputer () :
источник
Чтобы заменить nan в разных столбцах разными способами:
источник