我有一个嵌套字典存储在变量
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()
就像 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})
不过我还没试过。祝你好运! ;)