Python中缺少数据

Python中缺少数据,python,json,numpy,pandas,bigdata,Python,Json,Numpy,Pandas,Bigdata,我正在尝试将一个JSON文件导入Python,以进行一些数据分析。每个JSON对象都有很多不同的变量,大约7-10个。有些对象有某些变量,而其他对象没有。我对每个json行中的五个变量特别感兴趣。但是,某些对象缺少数据。如何使程序对每个缺失的数据都置零 import json data = [] keys = ["hostid","time", "userid","link", "title"] m = len(keys) with open('test.json') as json_data

我正在尝试将一个JSON文件导入Python,以进行一些数据分析。每个JSON对象都有很多不同的变量,大约7-10个。有些对象有某些变量,而其他对象没有。我对每个json行中的五个变量特别感兴趣。但是,某些对象缺少数据。如何使程序对每个缺失的数据都置零

import json
data = []
keys = ["hostid","time", "userid","link", "title"]
m = len(keys)

with open('test.json') as json_data:
    for line in json_data:
        dataline = json.loads(line)
        row = []
        for i in xrange(m):
            row.append(dataline[keys[i]])
        data.append(row)
json_data.close()

data = np.array(data)
下面是一些示例JSON对象。正如您所看到的,第一个对象拥有我想要的所有五个变量,但是第二个对象没有title变量的数据

{
"title": "Monster Man", 
"link": "http://monsters4ever.com/tagged/rosemary%27s%20baby%20(1968)",
"userid": 130290, 
"field5": "lezmer Brunch at City Winery? Who Knew? -- Grub Street Chicago\"", 
"hostid": "3969937ab0a3e2db8690c482564006a7", 
"time": 376541
}

{
"link": "http://www.sfgate.com/world/article/WORLD-News-of-the-Day-From-Across-the-Globe-4120318.php", 
"userid": 227954, "field5": "ries « SHEfinds\"", 
"hostid": "6096407936827c96fa0833f26ab33b76", 
"time": 376541
}
有人能帮我吗?

您可以使用try,因为当您尝试调用不存在的密钥时,它会引发异常:

import json
data = []
keys = ["hostid","time", "userid","link", "title"]
m = len(keys)

with open('test.json') as json_data:
    for line in json_data:
        dataline = json.loads(line)
        row = []
        for i in xrange(m):
            try:
                row.append(dataline[keys[i]])
            except Exception:
                row.append(None)
        data.append(row)
json_data.close()

data = np.array(data)

当您尝试从对象检索数据时,不要填充丢失的数据,而要使用通常的:x['field'],而要尝试x.get'field'

e、 g:

这是因为如果在字典中找不到键,dict.get将返回None

如果您确实不想这样做,并且您知道所需的字段,则可以使用dict.setdefault在其中不添加任何字段:

for field in fields_you_care_about:
    obj.setdefault(field, None)

我想试试。我还将遍历密钥列表

with open('test.json') as json_data:
    for line in json_data:
        dataline = json.loads(line)
        row = []
        for i in keys:#iterate through keys
            try:
                row.append(dataline[i])
            except:
                pass
        data.append(row)
json_data.close()

在不了解JSON结构的情况下,很难帮助您。请用“无”填充,然后用找到的键覆盖。@Floris我不知道您的意思。@PhillipCloud将信息添加到我的帖子中!总的来说,对于我来说。。。thing[i]应替换为for item in thing:。。。项目请参阅我的答案以获取示例。您的意思是使用row.appenddataline[keys[i]]代替row.appenddataline[keys.geti]?@user3287712-使用您的代码的修改版本进行更新。
with open('test.json') as json_data:
    for line in json_data:
        dataline = json.loads(line)
        row = []
        for i in keys:#iterate through keys
            try:
                row.append(dataline[i])
            except:
                pass
        data.append(row)
json_data.close()