【发布时间】:2018-09-27 17:21:51
【问题描述】:
我有 2 个固定宽度的文件,如下所示(唯一的变化是从位置 14 开始的日期值)。
sample_hash1.txt
GOKULKRISHNA 04/17/2018
ABCDEFGHIJKL 04/17/2018
111111111111 04/17/2018
sample_hash2.txt
GOKULKRISHNA 04/16/2018
ABCDEFGHIJKL 04/16/2018
111111111111 04/16/2018
使用 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)])
df1
GOKULKRISHNA
0 ABCDEFGHIJKL
1 111111111111
df2
GOKULKRISHNA
0 ABCDEFGHIJKL
1 111111111111
现在我正在尝试在每个数据帧上生成一个哈希值,但哈希值不同。我不确定这有什么问题。有人可以对此有所了解吗?我必须确定文件中的数据是否有任何变化(不包括日期列)。
print(hash(df1.values.tostring()))
-3571422965125408226
print(hash(df2.values.tostring()))
5039867957859242153
我正在将这些文件(每个文件大小约为 2GB)加载到表中。每次我们从源接收完整文件时,有时数据都没有变化(最后一列日期除外)。所以我的想法是拒绝这样的文件。因此,如果我可以在文件上生成哈希并存储在某处(在表中),那么下次我可以将新文件哈希值与存储的哈希进行比较。所以我认为这是正确的方法。但卡住了哈希生成。
我查看了这篇文章 Most efficient property to hash for numpy array 但这不是我要找的
【问题讨论】:
-
不同对象的哈希值会有所不同。两个数据框都不一样。试试
df1.values.tostring() == df2.values.tostring(),应该是假的。如果你想拥有相同的哈希值,你需要在取哈希值之前删除值中的数据。 -
是的,它是假的。有没有其他方法可以根据文件中的数据生成唯一代码? (不包括部分数据)
-
您可以尝试:
hash(df1[:-1].values.tostring())删除最后一列。 -
@TwistedSim 最后一列不在数据框中。我只加载前 13 个字符