将一个json格式字符串列表从redis数据库拉入Pandas数据帧



我有一个从redis数据库读取数据的web应用程序。数据库返回json格式的字符串列表。请参阅以下代码片段:

import redis
r = redis.StrictRedis(**redis_config)
keys = r.keys(pattern="*")
redis_values = r.mget(keys)
print(values[0:2])
print(type(redis_values))
print(type(redis_valus[0]))
Output:
['{"timestampx": "1621544968.075360000", "length": "528", "dscp": "0", "srcip": "172.16.1.2", "destip": "172.17.4.2"}', '{"timestampx": "1621544968.075750000", "length": "96", "dscp": "0", "srcip": "172.17.4.2", "destip": "172.16.1.2"}']
<class 'list'>
<class 'str'>

我无法将这个JSON字符串列表放入Pandas数据帧中。如果我使用:

myFrame = pd.DataFrame(redis_values)
print(myFrame.head()
Output:
0
0  {"timestampx": "1621620153.864122000", "length...
1  {"timestampx": "1621620111.615499000", "length...
2  {"timestampx": "1621620157.386244000", "length...
3  {"timestampx": "1621620123.367638000", "length...
4  {"timestampx": "1621620152.200464000", "length...

这是一个包含字符串的1列框架,而不是包含从JSON中提取的数据的5列框架。

如果我使用read_json怎么办?

myFrame = pd.read_json(redis_values)
Output:
ValueError: Invalid file path or buffer object type: <class 'list'>

这完全失败了。

如果我将字符串列表转换为JSON对象列表,该怎么办?

myJson = []
for rv in redis_values:
rv = json.loads(rv)
myJson.append(rv)
myFrame = pd.read_json(myJson)
Output: 
ValueError: Invalid file path or buffer object type: <class 'list'>

如果我将redis_values转储到一个文件中,然后使用read_json,它是有效的,但效率非常低。

f = open('myjson.txt','w')
for rv in redis_values:
f.write(rv+'n')
f.close()
myFrame = pd.read_json('myjson.txt', lines=True)

将JSON中的字符串列表转换为DataFrame应该没有那么困难。你能帮我吗?

尝试将json.loadspd.DataFrame一起使用

例如:

import json
df = pd.DataFrame(map(json.loads, vals))  # OR redis_values
print(df)

最新更新