我需要通过回归运行两个循环,其中一个是自变量,另一个是我需要在每轮自变量中保存的预测的后缀。我可以单独执行这些循环中的任何一个,它工作得很好,但当我将它们组合在同一个回归中时就不行了。我认为这与 % 之后回归结束时的循环映射有关。我收到错误代码“TypeError:列表索引必须是整数,而不是 str。”但是,这是因为我的因变量被读取为字符串以从 SPSS 数据框中获取值。有什么方法可以在包含字符串变量的回归中映射 for 循环吗?
我尝试过使用map()函数,但我得到的代码是不支持迭代。
begin program.
import spss,spssaux
dependent = ['dv1', 'dv2', 'dv3', 'dv4', 'dv5']
spssSyntax = ''
depList = spssaux.VariableDict(caseless = True).expand(dependent)
varSuffix = [1,2,3,4,5]
for dep in depList:
for var in varSuffix:
spssSyntax += '''
REGRESSION
/MISSING LISTWISE
/STATISTICS COEFF OUTS R
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT %(dep)s
/METHOD=FORWARD iv1 iv2 iv3
/SAVE PRED(PRE_%(var)d).
'''%(depList[dep],varSuffix[var])
end program.
我收到错误代码“TypeError:列表索引必须是整数,而不是 str” 与上面的代码。如何在包含字符串的同时映射循环?
最佳答案
在 Python 中,当直接循环遍历可迭代对象时,循环变量将变为当前值,因此无需使用 depList[dep]
和 varSuffix[var] 为原始列表建立索引
但直接使用变量:dep
和 var
。
此外,请考虑使用 str.format
进行字符串插值,即 Python 3 preferred method而不是过时的、不再强调的(尚未弃用)字符串模 %
运算符:
for dep in depList:
for var in varSuffix:
spssSyntax += '''REGRESSION
/MISSING LISTWISE
/STATISTICS COEFF OUTS R
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT {0}
/METHOD=FORWARD iv1 iv2 iv3
/SAVE PRED(PRE_{1})
'''.format(dep, var)
或者,考虑使用 itertools.product
将两个列表合并为一个循环,然后使用列表理解通过 join
构建字符串,而不是使用 连接循环迭代>+=
:
from itertools import product
import spss,spssaux
dependent = ['dv1', 'dv2', 'dv3', 'dv4', 'dv5']
depList = spssaux.VariableDict(caseless = True).expand(dependent)
varSuffix = [1,2,3,4,5]
base_string = '''REGRESSION
/MISSING LISTWISE
/STATISTICS COEFF OUTS R
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT {0}
/METHOD=FORWARD iv1 iv2 iv3
/SAVE PRED(PRE_{1})
'''
# LIST COMPREHENSION UNPACKING TUPLES TO FORMAT BASE STRING
# JOIN RESULTING LIST WITH LINE BREAKS SEPARATING ITEMS
spssSyntax = "\n".join([base_string.format(*dep_var)
for dep_var in product(depList, varSuffix)])
现在,如果您需要在等长列表之间按元素并行迭代,请考虑使用 zip
而不是 product
:
spssSyntax = "\n".join([base_string.format(d,v)
for d,v in zip(depList, varSuffix)])
或者枚举
作为索引号:
spssSyntax = "\n".join([base_string.format(d,i+1)
for i,d in enumerate(depList)])
关于python - 通过 SPSS 回归映射 Python for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58035918/