首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中缺少的数据

Python中缺少的数据
EN

Stack Overflow用户
提问于 2014-02-14 22:17:49
回答 3查看 3.5K关注 0票数 0

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

代码语言:javascript
复制
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“变量的数据。

代码语言:javascript
复制
{
"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
}

有人能帮帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-14 22:32:45

我会尝试的。我也只是迭代了一下键列表。

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2014-02-14 22:30:11

与其填写丢失的数据,不如尝试从对象检索数据,而不是通常的:x['field'],尝试x.get('field')

例如:

代码语言:javascript
复制
with open('test.json') as json_data:
    for line in json_data:
        dataline = json.loads(line)
        row = []
        for key in keys:
            row.append(dataline.get(key))

        # better is:
        # row = [dataline.get(key) for key in keys]

        data.append(row)

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

如果您真的不想这样做,并且知道您想要的字段,可以使用dict.setdefaultNone放在其中:

代码语言:javascript
复制
for field in fields_you_care_about:
    obj.setdefault(field, None)
票数 6
EN

Stack Overflow用户

发布于 2014-02-14 22:30:04

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

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21790505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档