Стабильны ли хэш-функции Pandas с течением времени? (pd.util.hash_pandas_object)

Я хочу создать столбцы идентификаторов, используя хэш-функции в моих кадрах данных pandas. Со временем конвейер будет перерабатываться, и мне нужно убедиться, что хеш-функции в Pandas стабильны в разных версиях и средах.

Для создания этих хэшей я использую составной ключ, состоящий из нескольких столбцов. В настоящее время я использую pd.util.hash_pandas_object из-за его скорости, но не смог найти в документации информацию о его стабильности с течением времени. Стабилен ли pd.util.hash_pandas_object в разных версиях Pandas? Если нет, не могли бы вы предложить быструю и стабильную альтернативу хешированию составных ключей в DataFrames?

1
0
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

На данный момент ситуация кажется довольно стабильной.

Предполагая этот пример:

import pandas as pd

print(pd.__version__)

df = pd.DataFrame({'col1': [0, 1, 2], 'col2': ['A', 'B', 'C']})
pd.util.hash_pandas_object(df)

Выход:

# pandas 1.0.3
0     3633373482604536162
1     5258867552551810711
2    13022556061186435711
dtype: uint64

# pandas 1.4.3
0     3633373482604536162
1     5258867552551810711
2    13022556061186435711
dtype: uint64

# pandas 2.2.2
0     3633373482604536162
1     5258867552551810711
2    13022556061186435711
dtype: uint64

Однако обратите внимание, что функция чувствительна к типу dtype:

# automatic conversion is fine
pd.util.hash_pandas_object(df.convert_dtypes())

0     3633373482604536162
1     5258867552551810711
2    13022556061186435711
dtype: uint64

# upcasting is not
pd.util.hash_pandas_object(df.astype({'col1': float}))

0     3633373482604536162
1    12198058518291636952
2     7562945033953410876
dtype: uint64

Если вы беспокоитесь, возможно, просто сохраните копию https://github.com/pandas-dev/pandas/blob/main/pandas/core/util/hashing.py ?

Если в будущем возникнут проблемы, просто используйте версию из вашей копии.

Другие вопросы по теме