如何在 Python 中将表达式作为函数关键字传递
How do I pass an expression as a function keyword in Python
我正在努力使我的代码成为 pythonic,但不知道该怎么做:
dfSort.assign(i+5=pd.Series(dfWork))
其中 dfSort 是数据框,pd 是 pandas 导入。当然 i+5
是一个表达式,因此不能作为列名传递。但是我想在代码中动态分配一个列名(称为i+5
)。否则,唯一的方法是(这会变得很麻烦):
if (i+5)== 5:
dfSort = dfSort.assign(a=pd.Series(dfWork, index=dfSort.index.values))
elif (i+5)==6:
dfSort = dfSort.assign(b=pd.Series(dfWork, index=dfSort.index.values))
elif (i+5)==7:
dfSort = dfSort.assign(c=pd.Series(dfWork, index=dfSort.index.values))
elif (i+5)==8:
dfSort = dfSort.assign(d=pd.Series(dfWork, index=dfSort.index.values))
有没有办法像第一个没有 if 语句的代码块一样做到这一点?
这行不通:
Colname = {5: 'a',6 : 'b', 7 : 'c', 8 : 'd'}
dfSort = dfSort.assign(Colname[i+5]=pd.Series(dfWork) )
如果 dfWork
是 pd.Series
类型,那么你可以使用字典解包,正如 Ashwini 提到的,像这样:
Colname = {5: 'a',6 : 'b', 7 : 'c', 8 : 'd'}
i = ... # an integer
dfSort = dfSort.assign(**{ Colname[i + 5] : pd.Series(dfWork, index=dfSort.index.values) })
演示:
In [625]: df
Out[625]:
0 1 2
0 1 3 4
1 2 4 5
2 3 5 6
In [627]: df.assign(**{Colname[i + 5] : pd.Series(['a', 'b', 'c'], index=df.index.values)})
Out[627]:
0 1 2 b
0 1 3 4 a
1 2 4 5 b
2 3 5 6 c
您可以传递一个包含多个 k:v 对的字典,同时对多个列进行赋值。
我正在努力使我的代码成为 pythonic,但不知道该怎么做:
dfSort.assign(i+5=pd.Series(dfWork))
其中 dfSort 是数据框,pd 是 pandas 导入。当然 i+5
是一个表达式,因此不能作为列名传递。但是我想在代码中动态分配一个列名(称为i+5
)。否则,唯一的方法是(这会变得很麻烦):
if (i+5)== 5:
dfSort = dfSort.assign(a=pd.Series(dfWork, index=dfSort.index.values))
elif (i+5)==6:
dfSort = dfSort.assign(b=pd.Series(dfWork, index=dfSort.index.values))
elif (i+5)==7:
dfSort = dfSort.assign(c=pd.Series(dfWork, index=dfSort.index.values))
elif (i+5)==8:
dfSort = dfSort.assign(d=pd.Series(dfWork, index=dfSort.index.values))
有没有办法像第一个没有 if 语句的代码块一样做到这一点?
这行不通:
Colname = {5: 'a',6 : 'b', 7 : 'c', 8 : 'd'}
dfSort = dfSort.assign(Colname[i+5]=pd.Series(dfWork) )
如果 dfWork
是 pd.Series
类型,那么你可以使用字典解包,正如 Ashwini 提到的,像这样:
Colname = {5: 'a',6 : 'b', 7 : 'c', 8 : 'd'}
i = ... # an integer
dfSort = dfSort.assign(**{ Colname[i + 5] : pd.Series(dfWork, index=dfSort.index.values) })
演示:
In [625]: df
Out[625]:
0 1 2
0 1 3 4
1 2 4 5
2 3 5 6
In [627]: df.assign(**{Colname[i + 5] : pd.Series(['a', 'b', 'c'], index=df.index.values)})
Out[627]:
0 1 2 b
0 1 3 4 a
1 2 4 5 b
2 3 5 6 c
您可以传递一个包含多个 k:v 对的字典,同时对多个列进行赋值。