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

На данный момент ситуация кажется довольно стабильной.
Предполагая этот пример:
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 ?
Если в будущем возникнут проблемы, просто используйте версию из вашей копии.