从字典中提取值并有条件地将它们分配给 pandas 中的列

我试图从 pandas 的一列字典中提取值并将它们分配给已经存在的各自列。我在下面硬编码了我拥有的数据集的示例:


df_have = pd.DataFrame(

{

    'value_column':[np.nan, np.nan, np.nan]

    ,'date':[np.nan, np.nan, np.nan]

    ,'string_column':[np.nan, np.nan, np.nan]

    , 'dict':[[{'value_column':40},{'date':'2017-08-01'}],[{'value_column':30}, 

{'string_column':'abc'}],[{'value_column':10},{'date':'2016-12-01'}]]

})


df_have


df_want = pd.DataFrame(

    {

        'value_column':[40, 30, 10]

        ,'date':['2017-08-01', np.nan, '2016-12-01']

        ,'string_column':[np.nan, 'abc', np.nan]

        ,'dict':[[{'value_column':40},{'date':'2017-08-01'}],[{'value_column':30}, 

{'string_column':'abc'}],[{'value_column':10},{'date':'2016-12-01'}]]})

df_want

我设法使用循环从字典中提取值:


'''


for row in range(len(df_have)):

    row_holder = df_have.dict[row]

    number_of_dictionaries_in_the_row = len(row_holder)

    

    for dictionary in range(number_of_dictionaries_in_the_row):

        variable_holder = df_have.dict[row][dictionary].keys()

        variable = list(variable_holder)[0]

        value = df_have.dict[row][dictionary].get(variable) 

'''


我现在需要以某种方式有条件地将 df_have 转换为 df_want。我很高兴采取一种全新的方法并从头开始重新创建整个事情。我们甚至可以假设我只有一个包含字典的数据框,没有其他任何东西。


长风秋雁
浏览 98回答 1
1回答

万千封印

您可以使用 pandas 字符串方法来提取数据,尽管我认为在 Pandas 中嵌套数据结构效率低下:df_have.loc[:, "value_column"] = df_have["dict"].str.get(0).str.get("value_column")df_have.loc[:, "date"] = df_have["dict"].str.get(-1).str.get("date")df_have.loc[:, "string_column"] = df_have["dict"].str.get(-1).str.get("string_column") value_column   date       string_column    dict0   40        2017-08-01    None    [{'value_column': 40}, {'date': '2017-08-01'}]1   30        None          abc     [{'value_column': 30}, {'string_column': 'abc'}]2   10        2016-12-01    None    [{'value_column': 10}, {'date': '2016-12-01'}]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python