更改 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()])
有没有办法改变嵌套字典的结构? 我在数据框中有一列包含多行字典,看起来像这样:
[{'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()])