更改 Python Pandas 中的字典结构

Change structure of dictionary in Python Pandas

有没有办法改变嵌套字典的结构? 我在数据框中有一列包含多行字典,看起来像这样:

[{'a': 'b', 'c': {'c1': 'v1', 'c2': 'v2'}}, {'a': 'b1', 'c': {'c1': 'x1', 'c2': 'x2'}}, {'a': 'b2', 'c': {'c1': 'n1', 'c2': 'n2'}}]

有没有办法修改结构,使其看起来像

[{'b': {'c1': 'v1', 'c2': 'v2'}}, {'b1': {'c1': 'x1', 'c2': 'x2'}}, {'b2': {'c1': 'n1', 'c2': 'n2'}}]

不改变实际值?

代码:

d = {'a': 'b', 'c': {'c1': 'v1', 'c2': 'v2'}}
dic={}
dic['b'] = d['c']
dic

输出:

{'b': {'c1': 'v1', 'c2': 'v2'}}

您应该阅读 pandas 中的函数 apply()

您构建了一个函数,该函数本质上是进行字典操作的:

def transformation(row):
    # Where 'correspondingColumn' is the name of your initial column
    return {row[correspondingColumn]['a']: row[correspondingColumn]['c']}

然后您可以使用 apply() 在 DataFrame 的所有行上调用它:

# Where 'newCol' is the name of your new column, or if you want to replace the other one, it can be the same
my_df['newCol'] = my_df.apply(transformation, axis = 1)

完整示例:

df = pd.DataFrame({
    'col':[{'a': 'b', 'c': {'c1': 'v1', 'c2': 'v2'}}]
})

def transformation(row):
    return {row['col']['a']: row['col']['c']}

df['newCol'] = df.apply(transformation, axis = 1)

# Output
                                         col                           newCol
0  {'a': 'b', 'c': {'c1': 'v1', 'c2': 'v2'}}  {'b': {'c1': 'v1', 'c2': 'v2'}}

词典列表更新:

def transformation(row):
    return [{elem['a']: elem['c']} for elem in row['col']]

你可以这样做

dict([d.values()])