将 json-formatterd 字符串列表从 Redis 数据库拉入 Pandas 数据框

Pull a list of json-formatterd strings from a redis database into a Pandas dataframe

我有一个从 redis 数据库读取的网络应用程序。数据库 returns 一个 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)