考虑一个片段
{
"participant_id": 37,
"response_date": "2016-05-19T07:19:32.620Z",
"data": {
"summary": 8,
"q6": [
"1",
"2"
],
"q1": 0,
"q2": 1,
"q3": 1,
"q4": 2,
"q5": 2
}
},
{
"participant_id": 37,
"response_date": "2016-05-26T07:14:24.7130Z",
"data": {
"summary": 8,
"q6": [
"1",
"2",
"4"
],
"q1": 0,
"q2": 1,
"q3": 1,
"q4": 2,
"q5": 2
}
}
这将产生一个 Pandas 数据框:
0 q1 q2 q3 q4 q5 q6 summary participant_id response_date
672 NaN 0.0 1.0 1.0 2.0 2.0 [1, 2] 8.0 37 2016-05-19 07:19:32.620
711 NaN 0.0 1.0 1.0 2.0 2.0 [1, 2, 4] 7.0 37 2016-05-26 07:14:24.713
如何将嵌套的
q6
扩展为“更宽”的格式?此属性 q6
可能包含最多 4 个可能的值。所以,理想情况下应该是: 0 q1 q2 q3 q4 q5 q6 q7 q8 q9 summary participant_id response_date
672 NaN 0.0 1.0 1.0 2.0 2.0 1.0 1.0 0.0 0.0 8.0 37 2016-05-19 07:19:32.620
711 NaN 0.0 1.0 1.0 2.0 2.0 1.0 1.0 0.0 1.0 7.0 37 2016-05-26 07:14:24.713
所以,基本上,方括号中的数字编码了
1
在 4 元素数组中的位置。有没有简单的 Pandasian 解决方案?
编辑
一些条目被错误地颠倒或随机记录(第一和第三行):
0 q1 q2 q3 q4 q5 q6 summary participant_id response_date
672 NaN 0.0 1.0 1.0 2.0 2.0 [1, 2] 8.0 37 2016-05-19 07:19:32.620
711 NaN 0.0 1.0 1.0 2.0 2.0 [1] 7.0 37 2016-05-20 07:14:24.713
740 NaN 0.0 1.0 1.0 2.0 2.0 [2, 1] 8.0 37 2016-05-21 07:10:17.251
774 NaN 0.0 1.0 1.0 1.0 3.0 [1, 2] 8.0 37 2016-05-22 08:28:14.579
809 NaN 0.0 1.0 1.0 1.0 3.0 [1, 2] 8.0 37 2016-05-23 07:30:27.259
在执行任何进一步的操作之前,应该对它们进行排序。
最佳答案
我觉得没那么容易。
DataFrame
+ get_dummies
用于新的 df reindex
用于添加缺失值 + rename
列 concat
到原始,( q6
) 列被删除 startswith
+ reindex_axis
用于列的新顺序 df1 = pd.get_dummies(pd.DataFrame(df['q6'].values.tolist()), prefix_sep='', prefix='')
df1.columns = df1.columns.astype(int)
df1 =df1.reindex(columns=range(1,5),fill_value=0).rename(columns=lambda x: 'q{}'.format(x+5))
print (df1)
q6 q7 q8 q9
0 1 1 0 0
1 1 1 0 1
df = pd.concat([df.drop('q6', axis=1), df1], axis=1)
mask = df.columns.str.startswith('q', na=False)
cols1 = df.columns[mask].tolist()
cols2 = df.columns[~mask].tolist()
cols = cols2[:1] + cols1 + cols2[1:]
df = df.reindex_axis(cols, axis=1)
print (df)
0 q1 q2 q3 q4 q5 q6 q7 q8 q9 summary participant_id \
0 NaN 0 1 1 2 2 1 1 0 0 8 37
1 NaN 0 1 1 2 2 1 1 0 1 8 37
response_date
0 2016-05-19T07:19:32.620Z
1 2016-05-26T07:14:24.7130Z
关于python - 展开嵌套数据(json、Pandas),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43519397/