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

问题描述

我正在尝试从大熊猫字典列中提取值,并将其分配给已经存在的相应列。我已经将下面的数据集硬编码为一个示例:

df_have = pd.DataFrame(
{
    'value_column':[np.nan,np.nan,np.nan],'date':[np.nan,'string_column':[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','2016-12-01'],'abc',{'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。我很高兴采用全新的方法,并从头开始重新创建整个过程。我们甚至可以假设我只有一个带有字典的数据框,而没有其他内容

解决方法

您可以使用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    dict
0   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'}]