我有以下数据框,其中“规则”列的列表中包含多个字典。
SetID SetName Rules
0 Standard_1 [{'RulesID': '10', 'RuleName': 'name_abc'}, {'RulesID': '11', 'RuleName': 'name_xyz'}]
1 Standard_2 [{'RulesID': '12', 'RuleName': 'name_arg'}]
Run Code Online (Sandbox Code Playgroud)
期望的输出是:
SetID SetName RulesID RuleName
0 Standard_1 10 name_abc
0 Standard_1 11 name_xyz
1 Standard_2 12 name_arg
Run Code Online (Sandbox Code Playgroud)
列表中可能有两个以上的字典。
我正在考虑使用 pop、explode 或 hub 函数来构建数据框,但我不知道如何开始。
每一条建议都将非常感激!
编辑:要构建数据框,您可以使用以下数据框构造函数:
# initialize list of lists
data = [[0, 'Standard_1', [{'RulesID': '10', 'RuleName': 'name_abc'}, {'RulesID': '11', 'RuleName': 'name_xyz'}]], [1, 'Standard_2', [{'RulesID': '12', 'RuleName': 'name_arg'}]]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['SetID', 'SetName', 'Rules'])
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以使用explode:
tmp = df.explode('Rules').reset_index(drop=True)
df = pd.concat([tmp, pd.json_normalize(tmp['Rules'])], axis=1).drop('Rules', axis=1)
Run Code Online (Sandbox Code Playgroud)
输出:
>>> df
SetID SetName RulesID RuleName
0 0 Standard_1 10 name_abc
1 0 Standard_1 11 name_xyz
2 1 Standard_2 12 name_arg
Run Code Online (Sandbox Code Playgroud)
上述的单行版本:
df.explode('Rules').reset_index(drop=True).pipe(lambda x: pd.concat([x, pd.json_normalize(x['Rules'])], axis=1)).drop('Rules', axis=1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |