Обработка нуля как значения в анти-соединении полярностейPython

Программы на Python
Ответить
Anonymous
 Обработка нуля как значения в анти-соединении полярностей

Сообщение Anonymous »

Я использую антисоединение Polars для преобразования обновлений набора данных в «дельты».
Это отлично работает, когда все значения столбца заполнены:

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

import polars as pl

my_dataset = pl.DataFrame(
{
"a": [1, 2, 3],
"b": ["x", "y", "z"],
"c": [0.1, 0.2, 0.3],
}
).lazy()

my_update = pl.DataFrame(
{
"a": [1, 2, 3, 4],
"b": ["x", "y", "z", "q"],
"c": [0.1, 0.2, 0.3, 0.4],
}
).lazy()

my_delta = my_update.join(my_dataset, on=my_update.columns, how="anti")
Однако, если один или несколько столбцов содержат значение Null, по умолчанию о совпадении не сообщается. Например:

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

my_dataset = pl.DataFrame(
{
"a": [1, 2, 3, 5],
"b": ["x", "y", "z", pl.Null],
"c": [0.1, 0.2, 0.3, 0.5],
}
).lazy()

my_update = pl.DataFrame(
{
"a": [1, 2, 3, 4, 5],
"b": ["x", "y", "z", "q", pl.Null],
"c": [0.1, 0.2, 0.3, 0.4, 0.5],
}
).lazy()

my_delta = my_update.join(my_dataset, on=my_update.columns, how="anti")
Производит:



a
b
c




4
q
0.4


5
Null
0.5



Хотя я понимаю, почему это так, я ищу способ get:



a
b
c




4
q
0.4



т.е. рассматривать строку, содержащую значение NULL в обеих таблицах, как совпадающую.
Каковы мои варианты?
Некоторые потенциальные предостережения:
  • Реальные данные, с которыми я имею дело, содержат > 50 столбцов переменных типов данных.
  • Значения NULL могут встречаться (почти) в любом столбце.
  • Я бы предпочел чтобы не заполнять Null (или, если это единственный вариант, иметь возможность каким-то образом восстановить исходные Null).


Подробнее здесь: https://stackoverflow.com/questions/781 ... -anti-join
Ответить

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

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

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

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

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