Я придумал следующее:
Код: Выделить всё
def print_changes(df1, df2):
assert df1.shape == df2.shape, "DataFrames must have the same shape"
a = (df1 != df2).fill_null(False).to_numpy()
b = (df1.with_columns(pl.all().is_null()) != df2.with_columns(pl.all().is_null())).to_numpy()
n_changes = (a | b).sum().sum()
return n_changes
Код: Выделить всё
import polars as pl
df1 = pl.DataFrame({
"name": ["José", "George", "George"],
"age": [28.2, float("nan"), None]
})
df2 = df1.fill_null(0)
print_changes(df1, df2) # prints 1
df2 = df1.fill_nan(0)
print_changes(df1, df2) # prints 1
df2 = df1.with_columns(pl.col("name").replace("George", "Mark"))
print_changes(df1, df2) # prints 2
Особенно мне не нравится преобразование в массивы numpy, но поляры, похоже, не поддерживают сравнение между логическими кадрами данных одного и того же размера.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... dataframes
Мобильная версия