我正在尝试使用其JSON提要分析NIST国家漏洞数据库。 URL为here。我能够读取json文件,并可以使用下面的熊猫将其放入数据框。
import pandas as pd
file_path = '/nvdcve-1.0-2017.json/nvdcve-1.0-2017.json'
json_file = open(file_path, 'r')
df = pd.read_json(json_file)
df = pd.io.json.json_normalize(df["CVE_Items"])
#Select vendor data to extract the vendor name, product name
df2 = df[["cve.affects.vendor.vendor_data"]]
返回的行更多,但第一个结果是这样的
[{'vendor_name': 'microsoft', 'product': {'product_data': [{'product_name': 'windows_10', 'version': {'version_data': [{'version_value': '*'}]}},
{'product_name': 'windows_8.1', 'version': {'version_data': [{'version_value': '*'}]}}, {'product_name': 'windows_rt_8.1', 'version': [{'version_value': '*'}]}},
{'product_name': 'windows_server_2008', 'version': [{'version_value': '*'}, {'version_value': 'r2'}]}}, {'product_name': 'windows_vista', 'version': {'version_data': [{'version_value': '*'}]}}]
我试图仅提取vendor_name和product_name放入新列中。我试图使用df2["cve.affects.vendor.vendor_data"].str.split(' ', expand=True)
拆分列,但是当我这样做时什么也没有发生。甚至没有错误消息。任何帮助将不胜感激。
-----编辑-----
当我查看前5行时,这就是我得到的。
In: print(df.head(5).to_dict())
Out: {'cve.affects.vendor.vendor_data': {0: [{'vendor_name': 'microsoft', 'product': {'product_data': [{'product_name': 'windows_10', 'version': {'version_data': [{'version_value': '-'}, {'version_value': '1511'}, {'version_value': '1607'}]}}, {'product_name': 'windows_7', 'version': {'version_data': [{'version_value': '*'}]}}, {'product_name': 'windows_8.1', 'version': {'version_data': [{'version_value': '*'}]}}, {'product_name': 'windows_rt_8.1', 'version': {'version_data': [{'version_value': '*'}]}}, {'product_name': 'windows_server_2008', 'version': {'version_data': [{'version_value': '*'}, {'version_value': 'r2'}]}}, {'product_name': 'windows_server_2012', 'version': {'version_data': [{'version_value': '-'}, {'version_value': 'r2'}]}}, {'product_name': 'windows_vista', 'version': {'version_data': [{'version_value': '*'}]}}]}}], 1: [{'vendor_name': 'microsoft', 'product': {'product_data': [{'product_name': 'edge', 'version': {'version_data': [{'version_value': '*'}]}}]}}], 2: [{'vendor_name': 'microsoft', 'product': {'product_data': [{'product_name': 'sharepoint_enterprise_server', 'version': {'version_data': [{'version_value': '2016'}]}}, {'product_name': 'word', 'version': {'version_data': [{'version_value': '2016'}]}}]}}]}}
我没有得到我认为的表,即使它说它是一个数据框。是否有可能保留某些json结构?