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

Aar*_*ron -1 python scipy anova pandas

我知道这听起来很荒谬,但是我必须将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])
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这样做,但是没有用

stats.f_oneway(
    for i in qualities:
        qualityTest['SalePrice'][qualityTest['OverallQual'] == i]
)
Run Code Online (Sandbox Code Playgroud)

Gre*_*Guy 5

您可以使用列表理解-本质上,使用for循环创建列表,然后将其传递给:

stats.f_oneway([qualityTest['salePrice'][qualityTest['OverallQual'] == i] for i in qualities])
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望将它作为i单独的参数传递,而不是作为带有i元素的列表传递,则可以*在最外面的一组方括号前面添加一个权利(这会将刚刚创建的列表解压缩为函数参数)。

  • 卸下最外面的方括号将使生成器通过。如果希望将参数分开,则必须使用`*`解包运算符。像这样的东西:`stats.f_oneway(*(qualityTest ['salePrice'] [qualityTest ['OverallQual'] == i] for i in quality))` (3认同)