Ошибка при использовании списочного понимания для добавления dict к объекту dataframe - PullRequest
0 голосов
/ 01 февраля 2019

Возникают проблемы с добавлением объектов dict в фрейм данных при использовании dict-понимания.

У меня есть некоторый код, который я продолжаю получать TypeError: объект 'float' не является подписным, если я запускаю тот же код с печатью, он работает

У меня есть такой фрейм данных:

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 голосов
/ 01 февраля 2019

О боже ... Я узнал, что пошло не так .... У меня была ошибка в моем наборе данных.Это то, как я это исправил .... извлеченный урок ... В следующий раз лучше проверять / стирать набор данных ..

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']]
0 голосов
/ 01 февраля 2019

Я думаю, что данные - это не диктанты, а строки в столбце 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
...