需要从python中的大型数据集中排除特定记录

需要从python中的大型数据集中排除特定记录,python,json,dataset,export-to-csv,Python,Json,Dataset,Export To Csv,所以我有这个dblp数据集,我需要排除会议。这是我将json转换为csv的代码,但我需要对其进行一些更改,以便它只能复制会议以外的文件。我的逻辑是在会场内找到会议地点,但代码工作不正常 import json import csv with open('test1.json') as lines, open('data3.csv', 'w',encoding='utf-8') as output: output = csv.DictWriter(output, ['abstract',

所以我有这个dblp数据集,我需要排除会议。这是我将json转换为csv的代码,但我需要对其进行一些更改,以便它只能复制会议以外的文件。我的逻辑是在会场内找到会议地点,但代码工作不正常

import json
import csv

with open('test1.json') as lines, open('data3.csv', 'w',encoding='utf-8') as output:
    output = csv.DictWriter(output, ['abstract','authors','n_citation',"references","title","venue","year",'id'],lineterminator='\n')
    output.writeheader()
    for line in lines:
        line = line.strip()
        if line[0] == '{' and line[-1] == '}':
            if line.find("conference")!=True:
                output.writerow(json.loads(line))
下面是示例json

{"abstract": "AdaBoost algorithm based on Haar-like features can achieves high accuracy (above 95%) in object detection.", 
"authors": ["Zheng Xu", "Runbin Shi", "Zhihao Sun", "Yaqi Li", "Yuanjia Zhao", "Chenjian Wu"], 
"n_citation": 0,
 "references": ["0a11984c-ab6e-4b75-9291-e1b700c98d52", "1f4152a3-481f-4adf-a29a-2193a3d4303c", "3c2ddf0a-237b-4d17-8083-c90df5f3514b", "522ce553-29ea-4e0b-9ad3-0ed4eb9de065", "579e5f24-5b13-4e92-b255-0c46d066e306", "5d0b987d-eed9-42ce-9bf3-734d98824f1b", "80656b4d-b24c-4d92-8753-bdb965bcd50a", "d6e37fb1-5f7e-448e-847b-7d1f1271c574"],
 "title": "A Heterogeneous System for Real-Time Detection with AdaBoost",
 "venue": "high performance computing and communications",
 "year": 2016,
 "id": "001eef4f-1d00-4ae6-8b4f-7e66344bbc6e"}


{"abstract": "In this paper, a kind of novel jigsaw EBG structure is designed and applied into conformal antenna array",
 "authors": ["Yufei Liang", "Yan Zhang", "Tao Dong", "Shan-wei Lu"], 
"n_citation": 0, 
"references": [], 
"title": "A novel conformal jigsaw EBG structure design", 
"venue": "international conference on conceptual structures", 
"year": 2016, 
"id": "002e0b7e-d62f-4140-b015-1fe29a9acbaa"}
如果我删除这行代码,代码可以正常工作

if line.find("conference")!=True:
下面是下载示例json文件的链接

小尺寸json

您可以使用json模块轻松访问不同的字段。如果能够在test1.json文件中将json对象表示为列表,则可以调用
json.load(open('test1.json','r'))
将json数据作为json对象列表加载。如果这是不可能的,您可以尝试以下方法

import json

json_objs=list()

#iterate through the json data and create json objects
with open('test.json') as lines:
    s_buffer = list()

    for line in lines:
        s_buffer.append(line)
        if '}' in line:
            json_objs.append(json.loads(''.join(s_buffer)))
            s_buffer = list()

#check if each event is a conference or not
output_list = list()
for obj in json_objs:

    if not 'conference' in obj['venue']:
        output_list.append(obj)



在处理数据时尝试写入文件可能会影响性能,我正在将输出数据附加到
输出列表中,该列表可用于以后写入csv文件。

以下操作似乎有效。由于输入文件的每一行都包含一个完整的JSON对象,因此它首先调用
JSON.loads()
,以获得一个Python字典,然后检查字典的内容,查看它是否有
“场所”
键,如果有,则该键的字符串值是否包含子字符串
“会议”

另外请注意,我认为您并不真正需要:

        line = line.strip()
        if line[0] == '{' and line[-1] == '}':
部分,但我留下了,因为我没有你的全部档案。这不会造成伤害,但会在一定程度上减慢处理速度

import csv
import json


fields = 'abstract,authors,n_citation,references,title,venue,year,id'.split(',')

with open('test1.json') as lines, \
     open('data3.csv', 'w', encoding='utf-8') as output:
    output = csv.DictWriter(output, fields, lineterminator='\n')
    output.writeheader()
    for line in lines:
        line = line.strip()
        if line[0] == '{' and line[-1] == '}':
            json_obj = json.loads(line)
            if 'conference' not in json_obj.get('venue', ''):
                output.writerow(json_obj)
修改以回答(我认为)评论中的后续问题:

import collections
import csv
import json
from pprint import pprint


fields = 'abstract,authors,n_citation,references,title,venue,year,id'.split(',')
# Added.
venue_citations = collections.defaultdict(int)  # Total number of citations per venue.

with open('test1.json') as lines, \
     open('data3.csv', 'w', encoding='utf-8') as output:
    output = csv.DictWriter(output, fields, lineterminator='\n')
    output.writeheader()
    for line in lines:
        line = line.strip()
        if line[0] == '{' and line[-1] == '}':
            json_obj = json.loads(line)
            venue = json_obj.get('venue', '')
            if 'conference' not in venue:
                output.writerow(json_obj)
                venue_citations[venue] += json_obj["n_citation"]  # Update count.

pprint(dict(venue_citations))

除非输入文件的每一行上都有一个有效的JSON对象,否则语句
output.writerow(JSON.loads(line))
不太可能工作。请回答您的问题,并添加一个示例,说明您试图处理的
test1.json
中的内容。我已在说明中粘贴了该链接。请检查您添加的链接是否为一个多兆字节的json格式文件,我不想下载全部内容来帮助回答问题。请创建一个更小的版本,并在您的问题中发布一个链接。@martineau请检查我是否更新了更小的版本OK,谢谢,我会看一看。谢谢@marineau。由于我是python新手,我很难找到每个地点的总引用次数。就像我想总结n_引用,不同论文的文脉是相同的。你能为我引路吗?伊克巴尔:我不知道你想做什么,但我用猜测更新了我的答案。谢谢你的帮助,但我想你误解了。所以这里有一个小例子,在数据集中有条目,包括标题,地点,n_引文(这是该论文的引文计数)。现在,我要做的是遍历数据集,以一种方式,将特定地点的所有引用计数汇总并存储在单独的csv中。让我来进一步说明。因此,假设有两篇论文都有相同的地点,一篇论文有引用120,另一篇论文有引用130。因此,我将选择第一个纸质场地,并在整个数据集中搜索它,然后如果再次找到它,则添加它的位置,因此新的csv将只包含这两列。1=场馆,2=场馆的总引用次数\基本上想要汇总独立场馆的引用并存储在新的csvUmer iqbal中:对不起,但我也不完全确定我是否理解。此外,此类涉及的后续问题在本网站上并不合适。也就是说,我的更新中的代码是将数据集中每个唯一场馆名称的引用总数相加,并将总计数存储在以场馆名称为关键字的字典中。似乎您所要做的就是将其写入
.csv
文件,使用键作为第一列,关联值作为第二列。我建议你尝试一下,如果你仍然被困住了,就发一个新问题。