Python Pandas: назначение данных JSON для записи фрейма данных возвращает ошибку «Несовместимый индексатор с сериями» - PullRequest
0 голосов
/ 20 ноября 2018

Как новичок в python, я борюсь с ошибкой "Несовместимый индексатор с сериями".

Я читаю запись из базы данных postgreSQL:

    df_postgresDB = pd.read_sql_query('SELECT * FROM public.json_view',con=<...>)        
    exampleKey = 'FPB-83160'
    jsonCol = 'efforts'
    AreasDict = df_postgresDB.loc[exampleKey, jsonCol]
    print('AreasDict=', AreasDict)
    print('type(AreasDict)=', type(AreasDict))

...output:

    AreasDict= {'4G NeVe': 0, '4G FT ET': 400, '4G C-Plane': 800, 'MANO BTSSM': 0}
    type(AreasDict)= <class 'dict'>

Столбец в базе данных postgreSQL показывает тип 'jsonb':

enter image description here

Это 'AreasDict'используется в функции другого проекта, который я хочу вызвать и повторно использовать для моего проекта.Но в моем проекте мне нужно собрать данные из другого источника.Поэтому я создаю фрейм данных и пытаюсь назначить это 'AreasDict' () ...

    column_names = ['issue_key', jsonCol]
    df = pd.DataFrame(index=range(1,2), columns=column_names)
    df.iloc[0, 0] = exampleKey
    df.iloc[0, 1] = AreasDict

... и с последней строкой кода я получаю эту ошибку

ValueError: Несовместимый индексатор с сериями

Что я делаю не так?

1 Ответ

0 голосов
/ 20 ноября 2018

В пандах не скалярные значения плохо поддерживаются - многие функции должны выйти из строя.


Решение преобразуется в list для списка словаря:

jsonCol = 'j'
exampleKey = 'key'
AreasDict= {'4G NeVe': 0, '4G FT ET': 400, '4G C-Plane': 800, 'MANO BTSSM': 0}

column_names = ['issue_key', jsonCol]
df = pd.DataFrame(index=range(1,2), columns=column_names)
df.iloc[0, 0] = exampleKey
df.iloc[0, 1] = [AreasDict]
print (df)
  issue_key                                                  j
1       key  [{'4G NeVe': 0, '4G FT ET': 400, '4G C-Plane':...
...