Python 是否可以在函数中传递for循环?
我知道这听起来很可笑,但我必须将for循环传递到函数中。我有一个75+列的数据框架,其中大多数是分类变量。其中一个变量名为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
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))
。