Объединение нескольких столбцов в полярах с отсутствующими значениями или значениями nanPython

Программы на Python
Ответить
Anonymous
 Объединение нескольких столбцов в полярах с отсутствующими значениями или значениями nan

Сообщение Anonymous »

Я пытаюсь выполнить некоторые агрегации, хотя мне нравятся поляры, но есть определенные вещи, которые я не могу выполнить. Вот мой подход и вопрос для справки.

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

import polars as pl
import polars.selectors as cs

import numpy as np

data = pl.DataFrame({'x': ['a', 'b', 'a', 'b', 'a', 'a', 'a', 'b', 'a'],
'y': [2, 3, 4, 5, 6, 7, 8, 9, 10],
'z': [4, np.nan, np.nan, 8,1, 1, 3, 4, 0],
'm' : [np.nan, 8, 1, np.nan, 3, 4, 8, 7, 1]})
У меня есть кадр данных, как указано выше. Вот мои вопросы и соответствующая попытка.
  • Как вычислить несколько сводок по нескольким столбцам (я получаю ошибку дублирования столбцов, как это исправить?)
Попытка:

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

data.group_by('x').agg(pl.all().mean(),
pl.all().sum())

  • почему медиана является допустимым значением, а среднее - нет?
    возможный ответ: это потому, что медиана рассчитывается путем сортировки и выбора среднего значения, и поскольку в этом случае центральное значение не равно нулю, следовательно, оно действительно (не уверен, что причина в этом)

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

print(data.select(pl.col('m').median())) ## line 1
print(data.select(pl.col('m').mean())) ## line 2

  • Если я заменю np.nan на None, вычисление среднего значения работает нормально в «строке 2» приведенного выше кода, почему?
  • почему это не работает? Я получаю сообщение об ошибке вычислений: расширение более чем на один столбец не разрешено. Что это на самом деле означает? По сути, я хотел отфильтровать любые строки, отсутствующие в обоих столбцах.

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

data.filter(pl.col(['z']).is_nan() | pl.col(['m']).is_nan())
  • Как заменить NaN в нескольких столбцах за один раз, я написал этот код, и он тоже работает, но он неуклюжий, есть ли лучший способ?

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

mean_impute = np.nanmean(data.select(pl.col(['z', 'm'])).to_numpy(), axis=0)

def replace_na(data, colname, i):
return data.with_columns(pl.when(pl.col(colname).is_nan()
).then(mean_impute[i]).otherwise(pl.col(colname)).alias(colname)).select(colname).to_numpy().flatten()

data.with_columns(z = replace_na(data, 'z', 0),
m = replace_na(data, 'm', 1))

Спасибо, что прочитали вопрос и ответили. Я не хочу помещать дублирующую запись в SO. Я понимаю правила, поэтому, пожалуйста, дайте мне знать, если это в каком-либо смысле дубликаты. Я бы с радостью удалил их. Но я не смог решить некоторые из них или написать решение, которое могло быть не очень хорошим. Еще раз спасибо!!!
Изменить:
работает версия Python: '3.10.9'
работает версия Polars: '0.20.31'

Подробнее здесь: https://stackoverflow.com/questions/785 ... nan-values
Ответить

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

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

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

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

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