【发布时间】:2014-02-24 23:19:21
【问题描述】:
我正在尝试从深度嵌套的 JSON 字符串创建单个 Pandas DataFrame 对象。
JSON 架构是:
{"intervals": [
{
pivots: "Jane Smith",
"series": [
{
"interval_id": 0,
"p_value": 1
},
{
"interval_id": 1,
"p_value": 1.1162791357932633e-8
},
{
"interval_id": 2,
"p_value": 0.0000028675012051504467
}
],
},
{
"pivots": "Bob Smith",
"series": [
{
"interval_id": 0,
"p_value": 1
},
{
"interval_id": 1,
"p_value": 1.1162791357932633e-8
},
{
"interval_id": 2,
"p_value": 0.0000028675012051504467
}
]
}
]
}
期望结果我需要将其展平以生成表格:
Actor Interval_id Interval_id Interval_id ...
Jane Smith 1 1.1162 0.00000 ...
Bob Smith 1 1.1162 0.00000 ...
第一列为Pivots的值,其余列为interval_id和p_value存储在列表series中的键值。
目前为止
import requests as r
import pandas as pd
actor_data = r.get("url/to/data").json['data']['intervals']
df = pd.DataFrame(actor_data)
actor_data 是一个长度等于个体数量的列表,即pivots.values()。 df 对象简单地返回
<bound method DataFrame.describe of pivots Series
0 Jane Smith [{u'p_value': 1.0, u'interval_id': 0}, {u'p_va...
1 Bob Smith [{u'p_value': 1.0, u'interval_id': 0}, {u'p_va...
.
.
.
如何遍历 series 列表以获取 dict 值并创建 N 个不同的列?我是否应该尝试为series 列表创建一个DataFrame,对其进行整形,然后使用演员名称进行列绑定?
更新:
pvalue_list = [i['p_value'] for i in json_data['series']]
这给了我一个列表列表。现在我需要弄清楚如何将每个列表添加为 DataFrame 中的一行。
value_list = []
for i in pvalue_list:
pvs = [j['p_value'] for j in i]
value_list = value_list.append(pvs)
return value_list
这会返回一个 NoneType
解决方案
def get_hypthesis_data():
raw_data = r.get("/url/to/data").json()['data']
actor_dict = {}
for actor_series in raw_data['intervals']:
actor = actor_series['pivots']
p_values = []
for interval in actor_series['series']:
p_values.append(interval['p_value'])
actor_dict[actor] = p_values
return pd.DataFrame(actor_dict).T
这将返回正确的 DataFrame。我转置了它,所以个人是行而不是列。
【问题讨论】:
-
list.append方法不返回任何内容(嗯,它返回None因为所有 Python 函数都返回一些内容),因为它会就地更新列表。只需删除value_list =,您的列表就会正确更新。