df有以下列:
索引(
“级别_id”、“描述”、“级别_类型”、“困难”、“解决方案”、“修饰符”、“最后修改”、“时间限制”、“标记”、“级别_选项”、“额外_信息”、“提示”
,dtype='object')
我正在转换的列是="level_options“
下面是level_options第一行中的数据:
{“标记”:“正常”、“选项”:{" 1 ":“二氧化碳”、"2":“氧气”、"3":“尿”、"4":“汗水”}、"max_score":1、"random_options":"false“、"correct_options":"2"}
然后在下面的代码中:我手动传递上面的第一行,得到预期的输出很好。
> j2=[{"marking": "normal", "options": {"1": "Yes", "2": "No"}, "max_score": 1, "random_options": "false", "correct_options": ["1"]}]
> pd.json_normalize(j2)
产出:
marking max_score random_options correct_options options.1 options.2 options.3 options.4
normal 1 false [2] Carbon dioxide Oxygen Urine Sweat
但是,在迭代所有行时,我没有得到输出。
我使用了下面的代码,我应该得到6个列表,但是得到了预期输出的空lists.PFA - 最终输出。
Option1=[]
Option2=[]
Option3=[]
Option4=[]
Option5=[]
Correct_option=[]
try:
> for index, row in df.iterrows():
> l=row["level_options"]
> print(l) except:
> print(index,row)
> l = json.loads(l)
> print(l)
> for i in l:
> i = pd.normalize_json(i)
> print(i)
> if i['options'] == '1':
> Option1.append(i['value'])
> elif i['options'] == '2':
> Option2.append(i['value'])
> elif i['options'] == '3':
> Option3.append(i['value'])
> elif i['options'] == '4':
> Option4.append(i['value'])
> elif i['options'] == '5':
> Option5.append(i['value'])
> elif i['options'] == 'correct_options':
> Correct_option.append(i['value'])
我甚至用json.loads代替了json_normalize,但是出现了错误。
下面是2行dataframe= df"level_options“
{“标识”:“正常”、“选项”:{" 1 ":“二氧化碳”、"2":“氧气”、"3":“尿”、"4":“汗液”}、"max_score":1、"random_options":“假”、"correct_options":"2"} {“标记”:“正常”、“选项”:{"1":“是”、"2":“否”}}"max_score":1,"random_options":"false","correct_options":"1"}
下面显示的输出是我在将每个列表合并为一个数据帧后所期望的结果,我所遇到的问题是在检索列表时.
感谢并致以问候
options.1 options.2 options.3 options.4 options.5 correct_options
Carbon dioxide Oxygen Urine Sweat NaN [2]
Yes No NaN NaN NaN [1]
发布于 2022-08-15 02:56:30
只需在列上尝试pd.json_normalize
out = (pd.json_normalize(df['level_options'])
.filter(like='option')
.drop('random_options', axis=1))
print(out)
correct_options options.1 options.2 options.3 options.4
0 [2] Carbon dioxide Oxygen Urine Sweat
1 [1] Yes No NaN NaN
https://stackoverflow.com/questions/73345471
复制相似问题