将 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.loads
与 pd.DataFrame
结合使用
例如:
import json
df = pd.DataFrame(map(json.loads, vals)) # OR redis_values
print(df)
我有一个从 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.loads
与 pd.DataFrame
例如:
import json
df = pd.DataFrame(map(json.loads, vals)) # OR redis_values
print(df)