我正在使用Python尝试找到在Pandas数据框中哈希每个值的最快方法。
我知道可以使用以下方式对任何字符串进行哈希:
hash('a string')
但是我如何在pandas数据框的每个元素上应用这个函数?
这可能是一件非常简单的事情,但我刚开始使用Python。
将hash
函数传递给str
列上的apply
:
In [37]:
df = pd.DataFrame({'a':['asds','asdds','asdsadsdas']})
df
Out[37]:
a
0 asds
1 asdds
2 asdsadsdas
In [39]:
df['hash'] = df['a'].apply(hash)
df
Out[39]:
a hash
0 asds 4065519673257264805
1 asdds -2144933431774646974
2 asdsadsdas -3091042543719078458
如果您想对每个元素执行此操作,请调用applymap
:
In [42]:
df = pd.DataFrame({'a':['asds','asdds','asdsadsdas'],'b':['asewer','werwer','tyutyuty']})
df
Out[42]:
a b
0 asds asewer
1 asdds werwer
2 asdsadsdas tyutyuty
In [43]:
df.applymap(hash)
Out[43]:
a b
0 4065519673257264805 7631381377676870653
1 -2144933431774646974 -6124472830212927118
2 -3091042543719078458 -1784823178011532358
除了@EdChum提醒外:hash()
在每台计算机上针对同一字符串的返回值可能不同。根据您的用例,最好使用
import hashlib
def md5hash(s: str):
return hashlib.md5(s.encode('utf-8')).hexdigest() # or SHA, ...
df['a'].apply(md5hash)
# or
df.applymap(md5hash)
PYTHONHASHSEED
环境变量。对于那些想知道为什么会存在这种行为的人,它是为了保护免受恶意攻击者发送的旨在冲突的密钥。import pandas as pd
df = pd.DataFrame({'a':['asds','asdds','asdsadsdas']})
df["hash"] = pd.util.hash_array(df["a"].to_numpy())
hash()
在每台机器上的每次运行不会返回相同的值!详情请参见下面我的回答。 - Michael Dorner