Python 是否可以在函数中传递for循环?

Python 是否可以在函数中传递for循环?,python,pandas,scipy,anova,Python,Pandas,Scipy,Anova,我知道这听起来很可笑,但我必须将for循环传递到函数中。我有一个75+列的数据框架,其中大多数是分类变量。其中一个变量名为SalePrice,我希望找到分类变量与SalePrice之间的相关性 这是我的代码,但我认为手动浏览所有75列是荒谬的。有简单的方法吗 df = pd.read_csv(file, delimiter=',') qualityTest = df[["OverallQual","SalePrice"]] qualities = [1,2,3,4,5,6,7,8,9,10] s

我知道这听起来很可笑,但我必须将for循环传递到函数中。我有一个75+列的数据框架,其中大多数是分类变量。其中一个变量名为
SalePrice
,我希望找到分类变量与
SalePrice
之间的相关性

这是我的代码,但我认为手动浏览所有75列是荒谬的。有简单的方法吗

df = pd.read_csv(file, delimiter=',')
qualityTest = df[["OverallQual","SalePrice"]]
qualities = [1,2,3,4,5,6,7,8,9,10]
stats.f_oneway(qualityTest['SalePrice'][qualityTest['OverallQual'] == 1],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 2],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 3],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 4],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 5],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 6],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 7],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 8],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 9],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 10])
我试过这么做,但没用

stats.f_oneway(
    for i in qualities:
        qualityTest['SalePrice'][qualityTest['OverallQual'] == i]
)

您可以使用列表理解-本质上,使用
for
循环创建一个列表,并将其传入:

stats.f_oneway([qualityTest['salePrice'][qualityTest['OverallQual'] == i] for i in qualities])

或者,如果您希望将其作为
i
单独的参数传递,而不是作为一个包含
i
元素的列表传递,您可以在最外层的方括号前面添加一个
*
(这将把您刚才制作的列表解压为函数参数)。

在此处使用
groupby

qualityTest.groupby('OverallQual').OverallQual.apply(stats.f_oneway)

你可以使用lambdaHi,我已经尝试了两种方法,但它返回了一个错误。ValueError:使用序列设置数组元素。(对于列表)TypeError:float()参数必须是字符串或数字,而不是“生成器”(在移除最外层的方括号后)。移除最外层的方括号将传递生成器。如果希望将参数分开,则必须使用
*
解包运算符。类似于:
stats.f_oneway(*(qualityTest['salePrice'][qualityTest['OverallQual']==i]for i in qualities))
@Tomothy32谢谢你,我已经更新了我的答案。顺便提一下,当生成器用于
print()
和其他接受任意数量参数的stdlib函数时,为什么它不能在这里工作?您能举个例子吗?尝试
打印(范围(5)中的i对应i)
会产生
。也许你的意思是打开一个生成器的包,比如
print(*(范围(5)中的i代表i))