首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将单个Json列的所有行转换为多列

将单个Json列的所有行转换为多列
EN

Stack Overflow用户
提问于 2022-08-13 15:20:13
回答 1查看 107关注 0票数 0

df有以下列:

索引(

“级别_id”、“描述”、“级别_类型”、“困难”、“解决方案”、“修饰符”、“最后修改”、“时间限制”、“标记”、“级别_选项”、“额外_信息”、“提示”

,dtype='object')

我正在转换的列是="level_options“

下面是level_options第一行中的数据:

{“标记”:“正常”、“选项”:{" 1 ":“二氧化碳”、"2":“氧气”、"3":“尿”、"4":“汗水”}、"max_score":1、"random_options":"false“、"correct_options":"2"}

然后在下面的代码中:我手动传递上面的第一行,得到预期的输出很好。

代码语言:javascript
运行
复制
>     j2=[{"marking": "normal", "options": {"1": "Yes", "2": "No"}, "max_score": 1, "random_options": "false", "correct_options": ["1"]}]
>     pd.json_normalize(j2)

产出:

代码语言:javascript
运行
复制
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 - 最终输出

代码语言:javascript
运行
复制
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"}

下面显示的输出是我在将每个列表合并为一个数据帧后所期望的结果,我所遇到的问题是在检索列表时.

感谢并致以问候

代码语言:javascript
运行
复制
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]  
EN

回答 1

Stack Overflow用户

发布于 2022-08-15 02:56:30

只需在列上尝试pd.json_normalize

代码语言:javascript
运行
复制
out = (pd.json_normalize(df['level_options'])
       .filter(like='option')
       .drop('random_options', axis=1))
代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73345471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档