Представление отсутствующего значения Pandas в агрегированном кадре данныхPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Представление отсутствующего значения Pandas в агрегированном кадре данных

Сообщение Anonymous »

При применении агрегирования к сгруппированному фрейму данных pandas агрегированные выходные данные содержат разные значения для агрегированных столбцов со всеми пропущенными значениями, в зависимости от типа столбца фрейма данных. Ниже приведен минимальный пример, содержащий одно непропущенное значение (целое число, строку и кортеж), одно значение NaN и одно значение None каждое:

Код: Выделить всё

import pandas as pd
import numpy as np

a1 = pd.DataFrame({'a': [3, np.nan, None], 'b': [0,1,2]})
a2 = pd.DataFrame({'a': ['tree', np.nan, None], 'b': [0,1,2]})
a3 = pd.DataFrame({'a': [(0,1,2), np.nan, None], 'b': [0,1,2]})

a1.groupby('b')['a'].first()
a2.groupby('b')['a'].first()
a3.groupby('b')['a'].first()

a1.groupby('b')['a'].agg('first')
a2.groupby('b')['a'].agg('first')
a3.groupby('b')['a'].agg('first')
Глядя на dtypes столбца 'a', можно увидеть, что это float64, object и object< /code> для a1, a2 и a3 соответственно. None в a1 преобразуется в NaN при создании кадра данных. Поэтому я бы имел следующее
Ожидаемое поведение вывода: Фактический результат :

Код: Выделить всё

b
0    3.0
1    NaN
2    NaN
Name: a, dtype: float64

b
0    tree
1    None
2    None
Name: a, dtype: object

b
0    (0, 1, 2)
1         None
2         None
Name: a, dtype: object
Почему агрегация изменяет данные с NaN на None для строки 1 в a2 и a3?< /strong> Поскольку столбец в любом случае относится к объекту dtype, не должно возникнуть проблем с возвратом NaN и None для строк 1 и 2 соответственно; и здесь мы не находимся в сценарии, в котором любая агрегируемая группа содержит как NaN, так и None. Документация (https://pandas.pydata.org/docs/referenc ... first.html) также не очень точна в отношении этого поведения, она просто упоминает возвращаемое значение для всех NA. -columns – нет данных.

Обновление:

Как упоминалось в ответе @mozway далее ниже, для чистых групп NaN/None,skipna=False может использоваться для сохранения NaN и None соответственно. Однако это не работает при наличии смешанных столбцов с неотсутствующими/отсутствующими значениями и столбцов со всеми пропущенными значениями (например, [[np.nan, None, 'tree'],[np.nan, None]] ), где нам все равно хотелось бы получить первое непропущенное значение, так как для этого потребуется передать Skipna=True.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -dataframe
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»