Pandas json_normalize:访问库和数组形式的数据
我试图在下面的嵌套json中提取'Resource'的值Pandas json_normalize:访问库和数组形式的数据,pandas,Pandas,我试图在下面的嵌套json中提取'Resource'的值 { "Statement": [ { "Effect": "A-----------", "Action": [ "logs:C-----------", "logs:P-----------&q
{
"Statement": [
{
"Effect": "A-----------",
"Action": [
"logs:C-----------",
"logs:P-----------"
],
"Resource": [
"a----",
"b----",
"c----"
]
}
{
"Effect": "A-----------",
"Action": "l-----------p",
"Resource": "a-----------*"
},
{
"Effect": "A-----------",
"Action": [
"-----------",
"l-----------"
],
"Resource": [
"a----",
"b----"
]
}
]
}
如您所见,对于第一个和第三个示例,“资源”信息位于数组“资源”:[“值”]
中,而第二个是库形式{“资源”:“值”}
在我从中提取信息的实际json文件中,大多数“资源”数据都是数组形式。
我可以通过以下代码获取阵列的信息:
df = pd.json_normalize(response['Document']['Statement'], record_path=['Resource'])
但是,由于库形式中的“资源”位于数组形式中的两个资源之间,因此会出现以下错误:
TypeError(TypeError:{'Resource':'---'}具有路径资源的非列表值---。必须是list或null。
我知道我可以使用下面的代码访问库信息,但我希望一次性获得所有“资源”实例的信息
table_df = pd.json_normalize(response['Statement'])
table_df = table_df.reindex(columns=['Resource'])
我可以用什么方法来解决这个问题?您不需要熊猫来操作json
import pandas as pd
data = {
"Statement": [
{
"Effect": "A-----------",
"Action": [
"logs:C-----------",
"logs:P-----------"
],
"Resource": [
"a----",
"b----",
"c----"
]
},
{
"Effect": "A-----------",
"Action": "l-----------p",
"Resource": "a-----------*"
},
{
"Effect": "A-----------",
"Action": [
"-----------",
"l-----------"
],
"Resource": [
"a----",
"b----"
]
}
]
}
resource = list()
for statement in data['Statement']:
if isinstance(statement['Resource'], list):
resource.extend(statement['Resource'])
else:
resource.append(statement['Resource'])
df = pd.Series(resource)
然后,您将得到一个如下所示的系列:
df
0 a----
1 b----
2 c----
3 a-----------*
4 a----
5 b----
dtype: object
这是一个简单但非常有效的解决方案。谢谢!我在使用此解决方案时发现了一个新问题。请查看主帖子中的编辑。我将尝试在“”上拆分列表,但我暂时不发布此帖子,以防有更优雅的解决方案。@ire为新问题编辑。。太棒了。谢谢:)