啊啊啊啊啊吖

2019-02-13   阅读量: 1889

数据分析师 Python数据分析

怎么使用pandas从嵌套的JSON数组中提取值

扫码加入数据分析学习群

我有一个大的JSON文件(400k行)。我试图隔离以下内容:

政策 - “描述”

策略项 - “用户”和“数据库值”

策略项目”之后的所有内容在整个文件中重复完全相同。我已经尝试过以下代码来隔离“用户”。它似乎不起作用,我试图将所有这些转换为CSV。

from pandas.io.json import json_normalize as Jnormal
import json
import pprint, csv
import re

with open("Ranger_Policies_20190204_195010.json") as file:
jsonDF = json.load(file)
for item in jsonDF['policies'][0]['policyItems'][0]:
print ('{} - {} - {}'.format(jsonDF['users']))

编辑2:我有一些工作代码可以抓住一些USERS,但它并没有抓住所有这些。25人中只有11人。

from pandas.io.json import json_normalize as Jnormal
import json
import pprint, csv
import re

with open("Ranger_Policies_20190204_195010.json") as file:
jsonDF = json.load(file)
pNode =
Jnormal(jsonDF['policies'][0]['policyItems'], record_path='users')
print(pNode.head(500))

编辑3:这是最终的工作副本,但我仍然没有复制我的所有TABLE数据。我设置一个循环来简单地忽略一切。捕获所有内容并在Excel中对其进行排序,有没有人有任何想法为什么我无法捕获所有TABLE值?

    json_data = json.load(file)
with open("test.csv", 'w', newline='') as fd:
wr = csv.writer(fd)
wr.writerow((
'Database name', 'Users', 'Description', 'Table'))
for policy in json_data['policies']:
desc = policy[
'description']
db_values = policy[
'resources']['database']['values']
db_tables = policy[
'resources']['table']['values']
for item in policy['policyItems']:
users = item[
'users']
for dbT in db_tables:
for user in users:
for db in db_values:
_ = wr.writerow((db, user, desc, dbT))```
添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.0000 0 4 关注作者 收藏

评论(1)

啊啊啊啊啊吖
2019-02-13

csv标准模块就足够了。您只需要迭代策略以将描述提取为数据库值,然后在policyItems上提取用户:

with open("Ranger_Policies_20190204_195010.json") as file:

jsonDF = json.load(file)

with open("outputfile.csv", newline='') as fd:

wr = csv.writer(fd)

_ = wr.writerow(('Database name', 'Users', 'Description'))

for policy in js['policies']:

desc = policy['description']

db_values = policy['resources']['database']['values']

for item in policy['policyItems']:

users = item['users']

for user in users:

for db in db_values:

if db != '*':

_ = wr.writerow((db, user, desc))

0.0000 0 0 回复

推荐课程