使用列表推导将字典添加到数据框对象时出错

时间:2019-02-01 13:19:58

标签: python json pandas list-comprehension

使用dict理解时,很难将dict对象添加到数据帧中。

我有一些代码,我不断收到类型错误:“浮动”对象不是标化的,如果我带打印运行相同的代码,它的工作原理

我的数据框如下:

organisasjonsnummer institusjonellSektorkode
981260546           {'kode': '2100', 'beskrivelse': 'Private aksje'}
913062159           {'kode': '2100', 'beskrivelse': 'Private aksje'}
975931366           {'kode': '2100', 'beskrivelse': 'Private aksje'}

我希望它看起来像这样:

organisasjonsnummer kode          beskrivelse
981260546           2100        'Private aksje'
913062159           2100        'Private aksje'
975931366           2100        'Private aksje'

所以我试图像这样追加到数据框,但是我无法使其工作...

Dataframe_test['kode'] = [x.get('kode') for x in Dataframe_test['institusjonellSektorkode']]
# This doesn't work
sample = [x['kode'] for x in SAMPLE_TEST['institusjonellSektorkode']]

# this works
sample = [print(x['kode']) for x in SAMPLE_TEST['institusjonellSektorkode']]

2 个答案:

答案 0 :(得分:1)

我认为数据不是字典,而是列institusjonellSektorkode中的字符串,因此需要在列表理解中由ast.literal_eval对其进行转换,然后创建新的DataFrame并加入原始数据。函数pop用于提取列:

import ast

df1 = pd.DataFrame([ast.literal_eval(x) for x in df.pop('institusjonellSektorkode')])
print (df1)
     beskrivelse  kode
0  Private aksje  2100
1  Private aksje  2100
2  Private aksje  2100

df = df.join(df1)
print (df)
   organisasjonsnummer    beskrivelse  kode
0            981260546  Private aksje  2100
1            913062159  Private aksje  2100
2            975931366  Private aksje  2100

答案 1 :(得分:0)

哦,我的...。我发现出了什么问题...。我的数据集有错误。这是我纠正它的方式。...经验教训...下次检查/清洗数据集更好。.

import numpy as np

# Simple function to that returns a NaN if it is not fed a dict as an input.
def get_value(dict, string_to_get):
    '''
    takes input of dict, and tries to return the value of the string, if it fails
    it will return null value
    '''
    try:
        get_string = dict.get(string_to_get)
        return get_string
    except:
        return np.nan

Dataframe_test['kode'] = [get_value(x,'kode') for x in Dataframe_test['institusjonellSektorkode']]