Неожиданное поведение некоторых полярных функций, когда НАН и NULLS вместеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Неожиданное поведение некоторых полярных функций, когда НАН и NULLS вместе

Сообщение Anonymous »

Недавно я наткнулся на какое -то поведение так, как работают некоторые функции катания поляров, которые я не понимаю. Проблема, по -видимому, представляется только тогда, когда есть NAN (), а также null () в данных.

i am in polars версия 1.31.0 < /code>, numpy 2.3.1 < /code> и python 3.12.11 < /code>.

Вот несколько примеров, обратите внимание, что я буду использовать функцию rolling_sum < /code> с размером окна 2 во всех примерах: < /p>

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

data_dict_1 = {"x":[1., 1., 1., np.nan, 1., 1., 1., 1., 1.]}
Эти данные содержит значение nan , и поэтому я ожидаю, что функция Rolling_sum будет иметь null в позиции индекса 0 и два Nan s в позициях индекса 3 и 4, это то, что мы видим.

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

data_1 = pl.DataFrame(data_dict_1)
with pl.Config(tbl_rows=20):
print(data_1.with_columns(pl.col("x").rolling_sum(2).alias("rolling")))
< /code>
shape: (9, 2)
┌─────┬─────────┐
│ x   ┆ rolling │
│ --- ┆ ---     │
│ f64 ┆ f64     │
╞═════╪═════════╡
│ 1.0 ┆ null    │
│ 1.0 ┆ 2.0     │
│ 1.0 ┆ 2.0     │
│ NaN ┆ NaN     │
│ 1.0 ┆ NaN     │
│ 1.0 ┆ 2.0     │
│ 1.0 ┆ 2.0     │
│ 1.0 ┆ 2.0     │
│ 1.0 ┆ 2.0     │
└─────┴─────────┘
< /code>
But if a null
() теперь добавляется значение в данные, поведение отклоняется от того, что я ожидаю.

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

data_dict_2 = {"x":[1., 1., 1., np.nan, 1., 1., 1., 1., 1., None, 1., 1., 1.]}
Теперь я ожидаю, что null в позиции индекса 0, два nan s в позициях индекса 3 и 4, и два NULL s в позициях индекса 9 и 10. Но вместо этого результат, который я получу, кажется, имеет какое -то странное распространение NAN s./p>

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

data_2 = pl.DataFrame(data_dict_2)
with pl.Config(tbl_rows=20):
print(data_2.with_columns(pl.col("x").rolling_sum(2).alias("rolling")))
< /code>
shape: (13, 2)
┌──────┬─────────┐
│ x    ┆ rolling │
│ ---  ┆ ---     │
│ f64  ┆ f64     │
╞══════╪═════════╡
│ 1.0  ┆ null    │
│ 1.0  ┆ 2.0     │
│ 1.0  ┆ 2.0     │
│ NaN  ┆ NaN     │
│ 1.0  ┆ NaN     │
│ 1.0  ┆ 2.0     │
│ 1.0  ┆ NaN     │
│ 1.0  ┆ NaN     │
│ 1.0  ┆ NaN     │
│ null ┆ null    │
│ 1.0  ┆ null    │
│ 1.0  ┆ NaN     │
│ 1.0  ┆ NaN     │
└──────┴─────────┘
< /code>
Notice in particular that we only get one 'normal' value after the NaN
(то есть 2.0), с тех пор он не выводит то, что ожидается (кроме NULL S).
для сравнения, используя функцию ROLLING_MAP с функцией sum , которую я могу получить желаемый результат и того, что я бы ожидал, функция ROLLING_SUM выполняет.

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

with pl.Config(tbl_rows=20):
print(data_2.with_columns(pl.col("x").rolling_map(sum, 2).alias("rolling")))
< /code>
shape: (13, 2)
┌──────┬─────────┐
│ x    ┆ rolling │
│ ---  ┆ ---     │
│ f64  ┆ f64     │
╞══════╪═════════╡
│ 1.0  ┆ null    │
│ 1.0  ┆ 2.0     │
│ 1.0  ┆ 2.0     │
│ NaN  ┆ NaN     │
│ 1.0  ┆ NaN     │
│ 1.0  ┆ 2.0     │
│ 1.0  ┆ 2.0     │
│ 1.0  ┆ 2.0     │
│ 1.0  ┆ 2.0     │
│ null ┆ null    │
│ 1.0  ┆ null    │
│ 1.0  ┆ 2.0     │
│ 1.0  ┆ 2.0     │
└──────┴─────────┘
< /code>
In my testing of this example it does not seem to matter where the null
значение помещается в данные, и оно все равно приведет к тому, что я считаю неожиданными результатами.

, конечно, в этом небольшом примере простое решение может состоять в том, чтобы заменить все NAN s на NULL s, а затем все должно вести себя, как я ожидаю (конечно, NAN в выводе будет NULL s, но, по крайней мере, фактические значения будут там), или действительно, чтобы просто использовать Rolling_Map с Sum с Sum .

Но я считаю (поправьте меня, если я ошибаюсь), что использование Rolling_map < /code>, как правило, медленнее, чем использование встроенной функции Polars, такими как Rolling_sum < /code>.

Кроме того, набор данных, на котором я изначально столкнулся с этой проблемой, более сложный, чем этот пример, и простое исправление замены Nan s на Null не помог, я не мог создать простой набор данных, для которого проблема не может быть на одном поведении, на что -то, что, на этом, может быть, что -то, что можно было вспомогать. Набор данных, чтобы я мог попробовать отладить свой больший анализ наборов данных оттуда.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • График полярных функций с uibezierpath
    Anonymous » » в форуме IOS
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Делайте NULLS ПЕРВЫМ при сортировке по возрастанию из PostgreSQL. Весенние данные JPA
    Гость » » в форуме JAVA
    0 Ответы
    73 Просмотры
    Последнее сообщение Гость
  • Как обрабатывать Nulls в LINQ при использовании MIN или MAX?
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Проецируется непосредственно на вложенные DTOS с использованием тройных операторов для обработки NULLS надежного шаблона
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Удалить Нан из столбца списков
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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