在Python中从数据帧提取文本

2024-10-05 10:46:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用他们的JSON提要分析NIST国家漏洞数据库。URL是here。我能够读取json文件,并可以使用下面的pandas将其放入数据帧中。你知道吗

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': '*'}]}}]

我试图只提取供应商名称和产品名称以放入新列中。我曾尝试使用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结构?你知道吗


Tags: namejsondfdataservervalueversionwindows

热门问题