gok*_*oks 8 python hash pandas
我有 2 个固定宽度的文件,如下所示(唯一的变化是日期值从位置 14 开始)。
sample_hash1.txt
GOKULKRISHNA 04/17/2018
ABCDEFGHIJKL 04/17/2018
111111111111 04/17/2018
Run Code Online (Sandbox Code Playgroud)
sample_hash2.txt
GOKULKRISHNA 04/16/2018
ABCDEFGHIJKL 04/16/2018
111111111111 04/16/2018
Run Code Online (Sandbox Code Playgroud)
使用 pandas read_fwf 我正在读取此文件并创建一个数据框(通过排除仅加载前 13 个字符的日期值)。所以我的数据框看起来像这样。
import pandas as pd
df1 = pd.read_fwf("sample_hash1.txt", colspecs=[(0,13)])
df2 = pd.read_fwf("sample_hash2.txt", colspecs=[(0,13)])
Run Code Online (Sandbox Code Playgroud)
df1
GOKULKRISHNA
0 ABCDEFGHIJKL
1 111111111111
Run Code Online (Sandbox Code Playgroud)
df2
GOKULKRISHNA
0 ABCDEFGHIJKL
1 111111111111
Run Code Online (Sandbox Code Playgroud)
现在我试图在每个数据帧上生成一个散列值,但散列是不同的。我不确定这有什么问题。有人可以对此有所了解吗?我必须确定文件中的数据是否有任何更改(不包括日期列)。
print(hash(df1.values.tostring()))
-3571422965125408226
print(hash(df2.values.tostring()))
5039867957859242153
Run Code Online (Sandbox Code Playgroud)
我正在将这些文件(每个文件大小约为 2GB)加载到表中。每次我们从源接收完整文件时,有时数据没有变化(最后一列日期除外)。所以我的想法是拒绝这样的文件。因此,如果我下次可以在文件上生成散列并存储在某个地方(在表中),我可以将新文件散列值与存储的散列值进行比较。所以我认为这是正确的方法。但坚持哈希生成。
我检查了这篇文章 Most Effective property to hash for numpy array 但这不是我要找的
您现在可以使用 pd.util.hash_pandas_object
hashlib.sha1(pd.util.hash_pandas_object(df).values).hexdigest()
Run Code Online (Sandbox Code Playgroud)
对于具有 5000 万行的数据帧,此方法花费了我 10 秒,而 to_json() 方法花费了超过一分钟。
使用字符串表示数据框。
import hashlib
print(hashlib.sha256(df1.to_json().encode()).hexdigest())
print(hashlib.sha256(df2.to_json().encode()).hexdigest())
Run Code Online (Sandbox Code Playgroud)
或者
print(hashlib.sha256(df1.to_csv().encode()).hexdigest())
print(hashlib.sha256(df2.to_csv().encode()).hexdigest())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4791 次 |
| 最近记录: |