Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将json文件解析为数据帧_Python_Json_Pandas_Parsing - Fatal编程技术网

Python 将json文件解析为数据帧

Python 将json文件解析为数据帧,python,json,pandas,parsing,Python,Json,Pandas,Parsing,我需要将一些json文件解析为一个数据帧。我希望有一列包含文本中的单词,另一列包含相应的实体–当“值”对应于单词时,实体将是下面文本的“类型”,否则我希望分配标签“O” 下面是一个例子。 这是JSON文件: {"Text": "I currently use a Netgear Nighthawk AC1900. I find it reliable.", "Entities": [ { "Type": "ORGANIZATI

我需要将一些json文件解析为一个数据帧。我希望有一列包含文本中的单词,另一列包含相应的实体–当“值”对应于单词时,实体将是下面文本的“类型”,否则我希望分配标签“O”

下面是一个例子。 这是JSON文件:

       {"Text": "I currently use a Netgear Nighthawk AC1900. I find it reliable.",
        "Entities": [
        {
            "Type": "ORGANIZATION ", 
            "Value": "Netgear"
        }, 
        {
            "Type": "DEVICE ", 
            "Value": "Nighthawk AC1900"
        }]
       }
以下是我想要得到的:

              WORD                TAG
              I                    O
              currently            O
              use                  O
              a                    O
              Netgear              ORGANIZATION
              Nighthawk AC1900     DEVICE
              .                    O
              I                    O
              find                 O
              it                   O
              reliable             O
              .                    O

有人能帮我分析一下吗?我不能使用split(),因为有时值由两个单词组成。希望这是清楚的。谢谢大家!

这是一个难题,取决于本例中没有的数据以及所需的输出。实体值中是否有重复数据?秩序重要吗?你想在输出中重复吗

可以使用以下几种工具:

  • 在搜索字符串之前,请先删除实体值。如果您有相同名称的重叠版本,如“Netgear”和“Netgear INC.”,并且您想要最长的版本,那么这是很好的
  • 这个人对名词很挑剔。本教程更好地解释了如何处理这些问题

我不知道您所需要的是否是您发布的期望输出。 我给你的解决方案是“脏的”(更多的元素和列标记放在第一位) 你可以设法清理它,并把它的格式,你需要的。因为您没有提供一段代码来开始,所以您可以完成它。 最终,您会发现stackoverflow的目的不是让人们为您编写代码,而是让人们帮助您完成您正在尝试的代码

import json
import pandas as pd

#open and reading of the json:
with open('netgear.json','r') as jfile:
   data = jfile.read()

info = json.loads(data)

#json into content 
words,tags = info['Text'].split(),info['Entities']

#list to handle the Entities
prelist = []

for i in tags:

    j = list(i.values())
    #['ORGANIZATION ', 'Netgear']
    #['DEVICE ', 'Nighthawk AC1900']    

    prelist.append(j)

#DataFrames to be merged
dft = pd.DataFrame(prelist,columns=['TAG','WORD'])  
dfw = pd.DataFrame(words,columns=['WORD'])  

#combine the dataFrames and NaN into 0
df = dfw.merge(dft, on='WORD', how='outer').fillna(0)
这是输出:

                 WORD            TAG
0                  I              0
1                  I              0
2          currently              0
3                use              0
4                  a              0
5            Netgear  ORGANIZATION 
6          Nighthawk              0
7            AC1900.              0
8               find              0
9                 it              0
10         reliable.              0
11  Nighthawk AC1900        DEVICE 

很高兴听到这个消息。如果可以,请对我的解决方案投赞成票。