df.apply
是可以在一个数据帧,或所需的列施加一定的函数到所有的列的方法。然而,我的目的是计算一个字符串的哈希值:这个字符串是对应于所有列的行的所有值的串联。我当前的代码将返回NaN
。
目前的代码是:
df["row_hash"] = df["row_hash"].apply(self.hash_string)
功能self.hash_string
是:
def hash_string(self, value):
return (sha1(str(value).encode('utf-8')).hexdigest())
是的,它会更容易合并的大熊猫数据帧中的所有列,但current answer也帮不了我。
我正在读的文件(第10行):
16012,16013,16014,16015,16016,16017,16018,16019,16020,16021,16022
16013,16014,16015,16016,16017,16018,16019,16020,16021,16022,16023
16014,16015,16016,16017,16018,16019,16020,16021,16022,16023,16024
16015,16016,16017,16018,16019,16020,16021,16022,16023,16024,16025
16016,16017,16018,16019,16020,16021,16022,16023,16024,16025,16026
山坳里的名字是:col_test_1, col_test_2, .... , col_test_11
您可以创建一个新列,这是所有其他的串联:
df['new'] = df.astype(str).values.sum(axis=1)
然后应用在它的散列函数
df["row_hash"] = df["new"].apply(self.hash_string)
这还是一个行应该工作:
df["row_hash"] = df.astype(str).values.sum(axis=1).apply(hash_string)
但是,不知道你在这里需要一个单独的函数,所以:
df["row_hash"] = df.astype(str).values.sum(axis=1).apply(lambda x: sha1(str(x).encode('utf-8')).hexdigest())
您可以使用apply
两次,第一次就行元素,然后对结果:
df.apply(lambda x: ''.join(x.astype(str)),axis=1).apply(self.hash_string)
旁注:我不明白为什么要定义hash_string作为实例方法(而不是一个简单的功能),因为它不使用self
说法。如果您有问题,可以只把它作为功能:
df.apply(lambda x: ''.join(x.astype(str)),axis=1).apply(lambda value: sha1(str(value).encode('utf-8')).hexdigest())