在Python中从数据框提取文本

时间:2018-07-25 22:05:01

标签: python pandas

我正在尝试使用其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结构?

0 个答案:

没有答案