【问题标题】:Dataframe extract dictionary from list数据框从列表中提取字典
【发布时间】:2020-09-01 06:04:20
【问题描述】:

我有以下格式的数据框:

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

【问题讨论】:

    标签: python pandas list dataframe dictionary


    【解决方案1】:

    您可以尝试列表理解:

    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
    

    【讨论】:

      【解决方案2】:

      这里没有字典列表,而是列表的字符串 repr。所以需要在你的解决方案之前创建列表:

      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  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-14
        • 2021-05-10
        • 2022-01-23
        • 2021-01-02
        • 2018-11-28
        • 2020-09-05
        • 2021-09-10
        • 1970-01-01
        相关资源
        最近更新 更多