Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧从列表中提取字典_Python_Pandas_List_Dataframe_Dictionary - Fatal编程技术网

Python 数据帧从列表中提取字典

Python 数据帧从列表中提取字典,python,pandas,list,dataframe,dictionary,Python,Pandas,List,Dataframe,Dictionary,我有以下格式的数据帧: ID Details 1 [{"Number":"63","ID":"1","Road":"West"}] 2 [{"Number":"97","ID":"2","Road":"North"}] 我试图提取每行中标记为Road的值

我有以下格式的数据帧:

ID Details
1  [{"Number":"63","ID":"1","Road":"West"}]
2  [{"Number":"97","ID":"2","Road":"North"}]
我试图提取每行中标记为Road的值。 预期产出:

ID Details                                    Road
1  [{"Number":"63","ID":"1","Road":"West"}]   West
2  [{"Number":"97","ID":"2","Road":"North"}]  North
df['Details'].str[0]
中,我得到[


df['Details'].str[0].str.get('Road')
中,我只得到NaN

没有dict列表,但字符串代表列表。因此需要在解决方案之前创建列表:

import ast, json

df['Details'] = df['Details'].apply(ast.literal_eval)
#alternative
#df['Details'] = df['Details'].apply(json.loads)

df['Details'].str[0].str.get('Road')
对于所有值,请使用:

df = df.join(pd.DataFrame(df['Details'].str[0].tolist(), index=df.index).add_prefix('det_'))
print (df)
   ID                                         Details det_Number det_ID  \
0   1   [{'Number': '63', 'ID': '1', 'Road': 'West'}]         63      1   
1   2  [{'Number': '97', 'ID': '2', 'Road': 'North'}]         97      2   

  det_Road  
0     West  
1    North  

您可以尝试以下列表:

df = pd.DataFrame(
    {
        "ID": [1, 2],
        "Details": [
            [{"Number": "63", "ID": "1", "Road": "West"}],
            [{"Number": "97", "ID": "2", "Road": "North"}],
        ],
    }
)

df

    ID  Details
0   1   [{'Number': '63', 'ID': '1', 'Road': 'West'}]
1   2   [{'Number': '97', 'ID': '2', 'Road': 'North'}]


df["Road"] = [entry["Road"] for entry in df.Details.str[0]]

    ID  Details                                         Road
0   1   [{'Number': '63', 'ID': '1', 'Road': 'West'}]   West
1   2   [{'Number': '97', 'ID': '2', 'Road': 'North'}]  North