python pandas:将json数据分配给数据框条目会返回错误“与系列不兼容的索引器”

时间:2018-11-20 08:49:59

标签: json pandas jsonb

作为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))

...输出:

    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:与Series不兼容的索引器

我该怎么办?

1 个答案:

答案 0 :(得分:1)

在大熊猫中,非标量值的支持很差-许多功能应该失败。


对于字典列表,解决方案将转换为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':...