我正在编写一个程序,它将从csv文件中读取数据帧,然后计算其中一个属性(列)的哈希值,并将其作为新属性存储在数据框中。所有这一切都很好。但是,我想要的是将哈希属性存储为我的密钥,将原始属性存储为redis中的值。我想对数据框中指定列中的每个元素执行此操作。例如:
这是我的原始数据框:
customer value
a 1
b 2
c 3
然后我想计算value属性的哈希:
customer value hash
a 1 23344
b 2 34567
c 3 78987
最后我想将哈希属性存储为我在Redis中的键,并将值作为我的值存储,例如,如果我要求获取
r.get(23344)
预期答案将是: ' 1'
或:
> r.get('78987')
> '3'
下面是我的python代码,我到达了r.set的部分,我的问题是它在属性名称下保存了整个属性,所以我无法查询单个元素。
import hashlib
import pandas as pd
import numpy as np
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
df= pd.read_csv ('file.csv')
df['hash']=df['value'].apply(hash)
r.set(df['hash'],df['value'])
我为这个漫长的解释道歉,我希望得到一些提示,因为我是新手,与熊猫和redis一起工作
答案 0 :(得分:2)
r.set(df['hash'],df['value'])
不是你想做的,redis set只接受一个键值对作为参数,例如r.set(df[hash][0], df['value'][0])
。
所以你的代码应该如下所示
for i in range(len(df['value'])):
r.set(df['hash'][i], df['value'][i])
这将有效。您还可以使用redis管道来加速此操作。
pipe = r.pipeline()
for i in range(len(df['value'])):
pipe.set(df['hash'][i], df['value'][i])
results = pipe.execute()