如何规范化DataFrame中包含JSON的列,得到一个完整的DataFrame
How to normalize the column which contains JSON in data frame and get a complete data frame
我有一个 pandas 数据框,其中一列包含 JSON 数据
Student_Id
V_Id
Json_result
32101
35
[{"q_id":"8007","q_text":"வேறுபட்ட பொம்மை எது?","q_img":"","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"105","MC":"1","LO Text":"ஓவியம் மற்றும் படங்களின் வெளிப்படையான மற்றும் மறைமுகமான கூறுகளை நுட்பமாக உற்று நோக்குதல்.","notes":"","isAnswered":"1","correctAnswerId":["1"],"isAnswerCorrect":"1","answer":"1"},{"q_id":"8008","q_text":"","q_img":"8008_Set_3.png","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"106","MC":"1","LO Text":"கதை, சூழல், நிகழ்வைத் தொடர்ச்சியான படங்கள் மற்றும் இவற்றில் இடம் பெறும் செயல்பாடுகள் பற்றி பேசுதல்.","notes":"(படம் பார்த்துக் கதையை மிகச் சரியாகக் கூறினால் 'சிறப்பு', சரியாகக் கூறினால் 'அருமை', கதையைக் கூறவில்லை என்றால் 'சிந்திக்க' என்பதைத் தன்னார்வலர் தேர்ந்தெடுக்கவும்.)","isAnswered":"1","correctAnswerId":["1","2"],"isAnswerCorrect":"","answer":"3"},{"q_id":"8009","q_text":"","q_img":"8009_Set_3.png","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"109","MC":"1","LO Text":"அச்சடிக்கப்பட்ட குறிப்பிட்ட எழுத்தை அடையாளம் காணுதல்.","notes":"","isAnswered":"1","correctAnswerId":["1"],"isAnswerCorrect":"1","answer":"1"}]
32102
35
[{"q_id":"8007","q_text":"வேறுபட்ட பொம்மை எது?","q_img":"","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"105","MC":"1","LO Text":"ஓவியம் மற்றும் படங்களின் வெளிப்படையான மற்றும் மறைமுகமான கூறுகளை நுட்பமாக உற்று நோக்குதல்.","notes":"","isAnswered":"1","correctAnswerId":["1"],"isAnswerCorrect":"1","answer":"1"},{"q_id":"8008","q_text":"","q_img":"8008_Set_3.png","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"106","MC":"1","LO Text":"கதை, சூழல், நிகழ்வைத் தொடர்ச்சியான படங்கள் மற்றும் இவற்றில் இடம் பெறும் செயல்பாடுகள் பற்றி பேசுதல்.","notes":"(படம் பார்த்துக் கதையை மிகச் சரியாகக் கூறினால் 'சிறப்பு', சரியாகக் கூறினால் 'அருமை', கதையைக் கூறவில்லை என்றால் 'சிந்திக்க' என்பதைத் தன்னார்வலர் தேர்ந்தெடுக்கவும்.)","isAnswered":"1","correctAnswerId":["1","2"],"isAnswerCorrect":"","answer":"3"},{"q_id":"8009","q_text":"","q_img":"8009_Set_3.png","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"109","MC":"1","LO Text":"அச்சடிக்கப்பட்ட குறிப்பிட்ட எழுத்தை அடையாளம் காணுதல்.","notes":"","isAnswered":"1","correctAnswerId":["1"],"isAnswerCorrect":"1","answer":"1"}]
我想规范化属性列中的 JSON 内容,以便 JSON 属性成为数据框中的每一列。数据框中有超过 40k 行。
单行中的json个样本形式如下
[
{
"q_id": "8007",
"q_text": "வேறுபட்ட பொம்மை எது?",
"q_img": "",
"subject": "Tamil",
"q_medium": "Tamil",
"Skill": "0",
"Class": "1std",
"LO ID": "105",
"MC": "1",
"LO Text": "ஓவியம் மற்றும் படங்களின் வெளிப்படையான மற்றும் மறைமுகமான கூறுகளை நுட்பமாக உற்று நோக்குதல்.",
"notes": "",
"isAnswered": "1",
"correctAnswerId": [
"1"
],
"isAnswerCorrect": "1",
"answer": "1"
},
{
"q_id": "8008",
"q_text": "",
"q_img": "8008_Set_3.png",
"subject": "Tamil",
"q_medium": "Tamil",
"Skill": "0",
"Class": "1std",
"LO ID": "106",
"MC": "1",
"LO Text": "கதை, சூழல், நிகழ்வைத் தொடர்ச்சியான படங்கள் மற்றும் இவற்றில் இடம் பெறும் செயல்பாடுகள் பற்றி பேசுதல்.",
"notes": "(படம் பார்த்துக் கதையை மிகச் சரியாகக் கூறினால் 'சிறப்பு', சரியாகக் கூறினால் 'அருமை', கதையைக் கூறவில்லை என்றால் 'சிந்திக்க' என்பதைத் தன்னார்வலர் தேர்ந்தெடுக்கவும்.)",
"isAnswered": "1",
"correctAnswerId": [
"1",
"2"
],
"isAnswerCorrect": "",
"answer": "3"
},
{
"q_id": "8009",
"q_text": "",
"q_img": "8009_Set_3.png",
"subject": "Tamil",
"q_medium": "Tamil",
"Skill": "0",
"Class": "1std",
"LO ID": "109",
"MC": "1",
"LO Text": "அச்சடிக்கப்பட்ட குறிப்பிட்ட எழுத்தை அடையாளம் காணுதல்.",
"notes": "",
"isAnswered": "1",
"correctAnswerId": [
"1"
],
"isAnswerCorrect": "1",
"answer": "1"
}
]
我想 link 学生 json q_id 并且想要如下输出
Student_Id
V_Id
q_id
subject
q_medium
Class
LO_ID
isAnswered
correctAnswerId
isAnswerCorrect
answer
32101
35
8007
Tamil
Tamil
1std
105
1
1
1
1
32101
35
8008
Tamil
Tamil
1std
106
1
[1,2]
-
3
32101
35
8009
Tamil
Tamil
1std
109
1
1
1
1
32102
35
8007
Tamil
Tamil
1std
105
1
1
1
1
32102
35
8008
Tamil
Tamil
1std
106
1
[1,2]
-
3
32102
35
8009
Tamil
Tamil
1std
109
1
1
1
1
像这样,我想获取 40k ID 和行的数据框。如何在python中写入得到这种数据框?
您可以先使用 df.explode()
并使用循环和 .apply(lambda)
来获取 Json Result
中每个键的值,如下例所示
import json
df['Json_result'] = df['Json_result'].apply(lambda x: json.loads(x))
df = df.explode('Json_result')
keys = df['Json_result'].tolist()[0].keys() # Get the list of keys in json
for column in keys: # loop to create new column by getting the value from the dict
df[column] = df['Json_result'].apply(lambda x: x.get(column, None))
我有一个 pandas 数据框,其中一列包含 JSON 数据
Student_Id | V_Id | Json_result |
---|---|---|
32101 | 35 | [{"q_id":"8007","q_text":"வேறுபட்ட பொம்மை எது?","q_img":"","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"105","MC":"1","LO Text":"ஓவியம் மற்றும் படங்களின் வெளிப்படையான மற்றும் மறைமுகமான கூறுகளை நுட்பமாக உற்று நோக்குதல்.","notes":"","isAnswered":"1","correctAnswerId":["1"],"isAnswerCorrect":"1","answer":"1"},{"q_id":"8008","q_text":"","q_img":"8008_Set_3.png","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"106","MC":"1","LO Text":"கதை, சூழல், நிகழ்வைத் தொடர்ச்சியான படங்கள் மற்றும் இவற்றில் இடம் பெறும் செயல்பாடுகள் பற்றி பேசுதல்.","notes":"(படம் பார்த்துக் கதையை மிகச் சரியாகக் கூறினால் 'சிறப்பு', சரியாகக் கூறினால் 'அருமை', கதையைக் கூறவில்லை என்றால் 'சிந்திக்க' என்பதைத் தன்னார்வலர் தேர்ந்தெடுக்கவும்.)","isAnswered":"1","correctAnswerId":["1","2"],"isAnswerCorrect":"","answer":"3"},{"q_id":"8009","q_text":"","q_img":"8009_Set_3.png","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"109","MC":"1","LO Text":"அச்சடிக்கப்பட்ட குறிப்பிட்ட எழுத்தை அடையாளம் காணுதல்.","notes":"","isAnswered":"1","correctAnswerId":["1"],"isAnswerCorrect":"1","answer":"1"}] |
32102 | 35 | [{"q_id":"8007","q_text":"வேறுபட்ட பொம்மை எது?","q_img":"","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"105","MC":"1","LO Text":"ஓவியம் மற்றும் படங்களின் வெளிப்படையான மற்றும் மறைமுகமான கூறுகளை நுட்பமாக உற்று நோக்குதல்.","notes":"","isAnswered":"1","correctAnswerId":["1"],"isAnswerCorrect":"1","answer":"1"},{"q_id":"8008","q_text":"","q_img":"8008_Set_3.png","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"106","MC":"1","LO Text":"கதை, சூழல், நிகழ்வைத் தொடர்ச்சியான படங்கள் மற்றும் இவற்றில் இடம் பெறும் செயல்பாடுகள் பற்றி பேசுதல்.","notes":"(படம் பார்த்துக் கதையை மிகச் சரியாகக் கூறினால் 'சிறப்பு', சரியாகக் கூறினால் 'அருமை', கதையைக் கூறவில்லை என்றால் 'சிந்திக்க' என்பதைத் தன்னார்வலர் தேர்ந்தெடுக்கவும்.)","isAnswered":"1","correctAnswerId":["1","2"],"isAnswerCorrect":"","answer":"3"},{"q_id":"8009","q_text":"","q_img":"8009_Set_3.png","subject":"Tamil","q_medium":"Tamil","Skill":"0","Class":"1std","LO ID":"109","MC":"1","LO Text":"அச்சடிக்கப்பட்ட குறிப்பிட்ட எழுத்தை அடையாளம் காணுதல்.","notes":"","isAnswered":"1","correctAnswerId":["1"],"isAnswerCorrect":"1","answer":"1"}] |
我想规范化属性列中的 JSON 内容,以便 JSON 属性成为数据框中的每一列。数据框中有超过 40k 行。
单行中的json个样本形式如下
[
{
"q_id": "8007",
"q_text": "வேறுபட்ட பொம்மை எது?",
"q_img": "",
"subject": "Tamil",
"q_medium": "Tamil",
"Skill": "0",
"Class": "1std",
"LO ID": "105",
"MC": "1",
"LO Text": "ஓவியம் மற்றும் படங்களின் வெளிப்படையான மற்றும் மறைமுகமான கூறுகளை நுட்பமாக உற்று நோக்குதல்.",
"notes": "",
"isAnswered": "1",
"correctAnswerId": [
"1"
],
"isAnswerCorrect": "1",
"answer": "1"
},
{
"q_id": "8008",
"q_text": "",
"q_img": "8008_Set_3.png",
"subject": "Tamil",
"q_medium": "Tamil",
"Skill": "0",
"Class": "1std",
"LO ID": "106",
"MC": "1",
"LO Text": "கதை, சூழல், நிகழ்வைத் தொடர்ச்சியான படங்கள் மற்றும் இவற்றில் இடம் பெறும் செயல்பாடுகள் பற்றி பேசுதல்.",
"notes": "(படம் பார்த்துக் கதையை மிகச் சரியாகக் கூறினால் 'சிறப்பு', சரியாகக் கூறினால் 'அருமை', கதையைக் கூறவில்லை என்றால் 'சிந்திக்க' என்பதைத் தன்னார்வலர் தேர்ந்தெடுக்கவும்.)",
"isAnswered": "1",
"correctAnswerId": [
"1",
"2"
],
"isAnswerCorrect": "",
"answer": "3"
},
{
"q_id": "8009",
"q_text": "",
"q_img": "8009_Set_3.png",
"subject": "Tamil",
"q_medium": "Tamil",
"Skill": "0",
"Class": "1std",
"LO ID": "109",
"MC": "1",
"LO Text": "அச்சடிக்கப்பட்ட குறிப்பிட்ட எழுத்தை அடையாளம் காணுதல்.",
"notes": "",
"isAnswered": "1",
"correctAnswerId": [
"1"
],
"isAnswerCorrect": "1",
"answer": "1"
}
]
我想 link 学生 json q_id 并且想要如下输出
Student_Id | V_Id | q_id | subject | q_medium | Class | LO_ID | isAnswered | correctAnswerId | isAnswerCorrect | answer |
---|---|---|---|---|---|---|---|---|---|---|
32101 | 35 | 8007 | Tamil | Tamil | 1std | 105 | 1 | 1 | 1 | 1 |
32101 | 35 | 8008 | Tamil | Tamil | 1std | 106 | 1 | [1,2] | - | 3 |
32101 | 35 | 8009 | Tamil | Tamil | 1std | 109 | 1 | 1 | 1 | 1 |
32102 | 35 | 8007 | Tamil | Tamil | 1std | 105 | 1 | 1 | 1 | 1 |
32102 | 35 | 8008 | Tamil | Tamil | 1std | 106 | 1 | [1,2] | - | 3 |
32102 | 35 | 8009 | Tamil | Tamil | 1std | 109 | 1 | 1 | 1 | 1 |
像这样,我想获取 40k ID 和行的数据框。如何在python中写入得到这种数据框?
您可以先使用 df.explode()
并使用循环和 .apply(lambda)
来获取 Json Result
中每个键的值,如下例所示
import json
df['Json_result'] = df['Json_result'].apply(lambda x: json.loads(x))
df = df.explode('Json_result')
keys = df['Json_result'].tolist()[0].keys() # Get the list of keys in json
for column in keys: # loop to create new column by getting the value from the dict
df[column] = df['Json_result'].apply(lambda x: x.get(column, None))