为什么将嵌套的 python 字典转换为 pandas 数据框会导致“没有属性‘items’错误?

问题描述 投票:0回答:1

我有一个嵌套字典存储在变量

nested_dict_variable
中。 使用 SPSS valueLabels 属性 (Python)

检索字典

type(nested_dict_variable)
结果为
dict

print(nested_dict_variable)
结果为
{0: {1.0: '1 - low', 2.0: '2', 3.0: '3', 4.0: '4', 5.0: '5 - high', 99.0: "99 - don't know"}, 1: {0.0: '0 - no', 1.0: '1 - yes'}, 2: {1.0: '1 - A', 2.0: '2 - B', 3.0: '3 - C'}}

我正在尝试将此嵌套字典转换为 pandas DataFrame,但收到以下错误。我不明白为什么会出现此属性错误,因为

nested_dict_variable
是(或似乎是)字典!?

AttributeError                            Traceback (most recent call last)
File c:\mypythonfile.py:38
     36 data_list = []
     37 for outer_key, inner_dict in nested_dict_variable.items():
---> 38     for inner_key, value in inner_dict.items():
     39         data_list.append({'Outer Key': outer_key, 'Inner Key': inner_key, 'Value': value})
     41 df = pd.DataFrame(data_list)

AttributeError: 'ValueLabel' object has no attribute 'items'

这是我的代码:

# see: https://www.ibm.com/docs/en/spss-statistics/28.0.0?topic=programs-running-spss-statistics-from-external-python-process#d10392e74
import spss
# import pandas
import pandas as pd

# read spss-data
file = r"C:\SPSS-SampleData1.sav"
spss.Submit(
    f"""
GET FILE='{file}'.
"""
)

var_index = []
nested_dict_variable= {}

# initialise the handling of spss commands
spss.StartDataStep()

# access active dataset (the one that was read above)
datasetObj = spss.Dataset()

# get a list of variable objects
varListObj = datasetObj.varlist
for var in varListObj:
    var_index.append(var.index)
    nested_dict_variable[var.index] = var.valueLabels


spss.EndDataStep()


##### CREATE DATAFRAMES #####

# convert nested dictionary to Pandas DataFrame
data_list = []
for outer_key, inner_dict in nested_dict_variable.items():
    for inner_key, value in inner_dict.items():
        data_list.append({'Outer Key': outer_key, 'Inner Key': inner_key, 'Value': value})

df = pd.DataFrame(data_list)



# end spss process
spss.StopSPSS()
python pandas dataframe dictionary spss
1个回答
0
投票

就像 user2357112 指出的那样,var.valueLabels 看起来像一个字典,但它不是一个。

我快速浏览了这个 python spss 包的 documentation,它说:

varObj = datasetObj.varlist['origin']
for val, valLab in varObj.valueLabels.data.iteritems():
   print val, valLab

所以你可以尝试重写你的代码:

data_list = []
for outer_key, inner_dict in nested_dict_variable.items():
    for inner_key, value in inner_dict.data.iteritems():
        data_list.append({'Outer Key': outer_key, 'Inner Key': inner_key, 'Value': value})

不过我还没试过。祝你好运! ;)

© www.soinside.com 2019 - 2024. All rights reserved.