递归地将 JSON 切片到数据帧列中



>我有一个数据帧,其中一列包含格式的JSON,其中一条记录看起来像 -

player_feedback
{'player': '1b87a117-09ef-41e2-8710-6bc144760a74', 
'feedback': [{'answer': [{'id': '1-6gaincareerinfo', 'content': 'To gain career information'},
{'id': '1-5proveskills', 'content': 'Opportunity to prove skills by competing '}, 
{'id': '1-1diff', 'content': 'Try something different'}], 'question': 1}, 
{'answer': [{'id': '2-2skilldev', 'content': 'Skill development'}], 'question': 2}, 
{'answer': [{'id': '3-6exploit', 'content': 'Exploitation'}, 
{'id': '3-1forensics', 'content': 'Forensics'}], 'question': 3}, 
{'answer': 'verygood', 'question': 4}, 
{'answer': 'poor', 'question': 5}, ... ... , 
{'answer': 'verygood', 'question': 15}]}

以下是数据的前 5 行。 我想将此列转换为单独的列,例如 -

player                                   Question 1                                   Question 2     ...   Question 15
1b87a117-09ef-41e2-8710-6bc144760a74   To gain career information,                   Skill development     verygood
Opportunity to prove skills by competing,     
Try something different 

我从——

df_survey_responses['player_feedback'].apply(ast.literal_eval).values.tolist()

但这只会让我在单独的字段中获得playerID,并在另一个字段中获得反馈。据我所知,JSONNormalize也会给我类似的结果。如何递归执行此操作以获得所需的结果,还是更好的方法?

谢谢!

您可以使用 json 扁平化器来喜欢这个:

def flatten_json(nested_json):
"""
Flatten json object with nested keys into a single level.
Args:
nested_json: A nested json object.
Returns:
The flattened json object if successful, None otherwise.
"""
out = {}
def flatten(x, name=''):
if type(x) is dict:
for a in x:
flatten(x[a], name + a + '_')
elif type(x) is list:
i = 0
for a in x:
flatten(a, name + str(i) + '_')
i += 1
else:
out[name[:-1]] = x
flatten(nested_json)
return out

它给出的数据帧如下所示:

       0
player                                    34a8eb8a-056f-4568-88dc-8736056819a3
feedback_0_answer_0_id                                          1-5proveskills
feedback_0_answer_0_content          Opportunity to prove skills by competing 
feedback_0_question                                                          1
feedback_1_answer_0_id                                           2-1networking
feedback_1_answer_0_content                                         Networking
feedback_1_answer_1_id                                             2-2skilldev
feedback_1_answer_1_content                                  Skill development
feedback_1_question                                                          2
feedback_2_answer_0_id                                           3-5boottoroot
feedback_2_answer_0_content                                          Boot2root
feedback_2_answer_1_id                                              3-6exploit
feedback_2_answer_1_content                                       Exploitation
feedback_2_question                                                          3
feedback_3_answer                                                         good
feedback_3_question                                                          4
feedback_4_answer                                                         good
feedback_4_question                                                          5
feedback_5_answer                                                    selfchose
feedback_5_question                                                          6
feedback_6_answer                                                        pairs
feedback_6_question                                                          7
feedback_7_answer_0_id                                           7-persistence
feedback_7_answer_0_content                                        Persistence
feedback_7_question                                                          8
feedback_8_answer                                                       social
feedback_8_question                                                          9
feedback_9_answer                                                     training
feedback_9_question                                                         10
feedback_10_answer                                                         yes
feedback_10_question                                                        11
feedback_11_answer                                                         yes
feedback_11_question                                                        12
feedback_12_answer                                                         yes
feedback_12_question                                                        13
feedback_13_answer                                                         yes
feedback_13_question                                                        14
feedback_14_answer                                                    verygood
feedback_14_question                                                        15
feedback_15_answer                                                         yes
feedback_15_question                                                        16
feedback_16_answer                                                         yes
feedback_16_question                                                        17
feedback_17_answer           It would be good to have more exploitation one...
feedback_17_question                                                        18

最新更新