繁体   English   中英

从 pandas dataframe 列中的列表中分离 dict 到不同的 dataframe 列

[英]separate dict from list in pandas dataframe column into different dataframe columns

[{
"name":"game_time",
"type":"int",
"info":"millisecond count since start of game"
},
{
"name":"round",
"type":"int",
"info":"number of the current round when the even takes place or 0 if no round"
}]

我的尝试:

规格:Dataframe 包含 args 列文件示例附在下面

specs['args'].apply(lambda x : x.split('},{')).to_frame()['args'].apply(pd.Series).apply(lambda x : x.str[2:])
specs['args'].apply(pd.Series)

样本文件

我希望 ast 在这种情况下会对您有所帮助。这是解决方案

结果的一个版本

import pandas as pd
from ast import literal_eval

df = pd.read_csv('test_.csv', header = None)
df

Out[1]:

           0
    0   [{"name":"game_time","type":"int","info":"mill...
    1   [{"name":"game_time","type":"int","info":"mill...
    2   [{"name":"game_time","type":"int","info":"mill...
    3   [{"name":"game_time","type":"int","info":"mill..

lst = [m for s in df[0] for m in literal_eval(s)]
lst

Out[2]:

[{'name': 'game_time',
  'type': 'int',
  'info': 'millisecond count since start of game'},
 {'name': 'round',
  'type': 'int',
  'info': 'number of the current round when the event takes place or 0  if no round'},
 {'name': 'level',
  'type': 'int',
  'info': 'number of the current level when the event takes place or 0     if no level'},
 {'name': 'description',.......


pd.DataFrame.from_dict(lst)

Out[3]:

                                                     info   name        type
    0   millisecond count since start of game               game_time   int
    1   number of the current round when the event tak...   round       int
    2   number of the current level when the event tak...   level       int
    3   the text or description of the instruction          description string
    ........

这是你想要的结果吗?

结果的另一个版本

如果您想要与您的代码中相同的 output,这里是示例

lst1 = [literal_eval(s) for s in df[0]]
pd.DataFrame(lst1)

只需使用 dataframe 构造函数

data = [{
"name":"game_time",
"type":"int",
"info":"millisecond count since start of game"
},
{
"name":"round",
"type":"int",
"info":"number of the current round when the even takes place or 0 if no round"
}]

print(pd.DataFrame(data))

出去:

                                                info       name type
0              millisecond count since start of game  game_time  int
1  number of the current round when the even take...      round  int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM