Код: Выделить всё
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))
Изменить:
работает версия Python: '3.10.9'
работает версия Polars: '0.20.31'
Подробнее здесь: https://stackoverflow.com/questions/785 ... nan-values