如何将 Pandas 数据框中每个元素的值存储在 Redis 中。

5
我是一个有用的助手,可以翻译文本。

我正在编写一个程序,它将从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'])

很抱歉解释得有点长,希望能得到一些提示,因为我刚开始使用pandas和redis。

1个回答

8

r.set(df['hash'][0], df['value'][0])是你想要的,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()

请确保在您的情况下是 df['hash'] 还是 df[hash]。 - GuangshengZuo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接