'NoneType'对象在OrderedDict - pandas dataframe中不可订阅

时间:2018-02-03 00:52:44

标签: python pandas dictionary dataframe ordereddictionary

我正在尝试将有序字典中的信息提取到pandas数据帧中。有序的dict来自对数据库的查询。为了将信息上传回数据库并对其进行操作,我需要它采用pandas数据帧格式。

我一直在使用以下方法将有序字典转换为pd.DataFrame

Ordered Dict示例:

x = [OrderedDict([('attributes',
               OrderedDict([('type', 'User'),
                            ('url',
                             '/services/data/v38.0/sobjects/User/0051300000C2dczAAB')])),
              ('Id', '0051300000C2dczAAB'),
              ('UserRole',
               OrderedDict([('attributes',
                             OrderedDict([('type', 'UserRole'),
                                          ('url',
                                           '/services/data/v38.0/sobjects/UserRole/00E1B000002DT6bUAG')])),
                            ('Name', 'Platform NA')]))]),
 OrderedDict([('attributes',
               OrderedDict([('type', 'User'),
                            ('url',
                             '/services/data/v34.0/sobjects/User/005a0000007oQYSST2')])),
              ('Id', '005a0000007oQYSST2'),
              ('UserRole', None)])]



df = pd.DataFrame(
           dict(Id = rec['Id'],
                UserRole = rec['UserRole']['Name']) for rec in x)

这一直很有效,除非我有一个记录,其中没有基础记录(在本例中)UserRole。我收到错误'NoneType' object is not subscriptable,因为我正在尝试从['Name'] OrderedDict中提取x['UserRole']。我已经尝试创建另一个生成器来拉出它,或者一个for循环没有成功。这个例子有两个特征,我的真实数据集是10个以上的特征,有些,并非所有特征都在那里有无记录。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

你可以有一个辅助功能。

def helper(x, attribute):
    return None if x is None else x[attribute]

df = pd.DataFrame(
           dict(Id = rec['Id'],
                UserRole = helper(rec['UserRole'], "Name")) for rec in x)