簡體   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