【发布时间】:2018-10-07 00:06:45
【问题描述】:
假设我有以下 DataFrame,其中 data 列包含一个嵌套的 JSON 字符串,我想将其解析为单独的列:
import pandas as pd
df = pd.DataFrame({
'bank_account': [101, 102, 201, 301],
'data': [
'{"uid": 100, "account_type": 1, "account_data": {"currency": {"current": 1000, "minimum": -500}, "fees": {"monthly": 13.5}}, "user_name": "Alice"}',
'{"uid": 100, "account_type": 2, "account_data": {"currency": {"current": 2000, "minimum": 0}, "fees": {"monthly": 0}}, "user_name": "Alice"}',
'{"uid": 200, "account_type": 1, "account_data": {"currency": {"current": 3000, "minimum": 0}, "fees": {"monthly": 13.5}}, "user_name": "Bob"}',
'{"uid": 300, "account_type": 1, "account_data": {"currency": {"current": 4000, "minimum": 0}, "fees": {"monthly": 13.5}}, "user_name": "Carol"}'
]},
index = ['Alice', 'Alice', 'Bob', 'Carol']
)
df
我找到了json_normalize 函数,目前正在列表解析中解析JSON;结果是正确的,但这需要 long。 1000 行需要 1-2 秒,而我在实际运行中大约有 100 万行:
import json
from pandas.io.json import json_normalize
parsed_df = pd.concat([json_normalize(json.loads(js)) for js in df['data']])
parsed_df['bank_account'] = df['bank_account'].values
parsed_df.index = parsed_df['user_id']
parsed_df
有没有更快的方法将这些数据解析成漂亮的 DataFrame?
【问题讨论】:
标签: python json pandas performance