Python 如何使用eval dataframe方法在自定义函数中返回numpy数组或列表?
我正在使用Python3.X。我正在尝试使用dataframe方法,包括这样的自定义函数Python 如何使用eval dataframe方法在自定义函数中返回numpy数组或列表?,python,python-3.x,pandas,dataframe,eval,Python,Python 3.x,Pandas,Dataframe,Eval,我正在使用Python3.X。我正在尝试使用dataframe方法,包括这样的自定义函数 将熊猫作为pd导入 将numpy作为np导入 df=pd.DataFrame({ ‘T’:[0,10,0,10,10,30], 'P':[0,0,1000,1000,0,0], 'S':[25,25,25,40,40] }) def自定义(A、B、C): #一些操作 aux=pd.DataFrame({ “A”:[0,10,0,10,10,30], }) return aux.A#这里是我想要返回numpy
将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame({
‘T’:[0,10,0,10,10,30],
'P':[0,0,1000,1000,0,0],
'S':[25,25,25,40,40]
})
def自定义(A、B、C):
#一些操作
aux=pd.DataFrame({
“A”:[0,10,0,10,10,30],
})
return aux.A#这里是我想要返回numpy数组或列表,或dataframe列的地方
等式='RES=T+@custom(S,T,P)+2'
df.eval(eq,engine='numexpr',inplace=True)
但我只能在函数中返回一个浮点值或整数值,一个简单的值
所以我想返回一个numpy数组或一个值列表,因为我想使用结果来处理其余的方程变量。我得到这个错误:
TypeError: unhashable type: 'numpy.ndarray'
另一个例子:
将熊猫作为pd导入
将numpy作为np导入
作为西南部进口海水
从sewater.library导入T90conv
df=pd.DataFrame({
'T':T90conv([0,10,0,10,10,30]),
'P':[0,0,1000,1000,0,0],
'S':[25,25,25,40,40]
})
cndr=sw.cndr#它返回一个numpy数组
等式='新=@cndr(S,T,P)'
df.eval(eq,engine='numexpr',inplace=True)
可能吗?我可以退哪种类型的?有没有其他方法可以实现这一点?我无法使用
numexpr
引擎使其工作-它总是给我TypeError:unhable类型:“numpy.ndarray”
我还尝试将numpy.ndarray
转换为list
或tuple
——它仍然说:TypeError:不支持的表达式类型:
或TypeError:不可破坏的类型:'list'
但它确实可以与python
引擎一起工作:
In [47]: df.eval("NEW = @sw.cndr(S, T, P)", engine='python', inplace=True)
In [48]: df
Out[48]:
P S T NEW
0 0 25 0.000000 0.498008
1 0 25 9.997601 0.654990
2 1000 25 0.000000 0.506244
3 1000 25 9.997601 0.662975
4 0 40 9.997601 1.000073
5 0 40 29.992802 1.529967
下面的解决方法是什么
In [77]: df = df.assign(RES=sw.cndr(df['S'], df['T'], df['P'])) \
.eval("RES = T + RES + 2", inplace=False)
In [78]: df
Out[78]:
P S T RES
0 0 25 0.000000 2.498008
1 0 25 9.997601 12.652591
2 1000 25 0.000000 2.506244
3 1000 25 9.997601 12.660576
4 0 40 9.997601 12.997674
5 0 40 29.992802 33.522769
您期望/期望的数据集是什么?您不能在没有eval的情况下执行此操作吗?我希望使用函数的返回值进行操作,因为它是另一列。我已经添加了另一个@maxuYes示例,您应该像这样使用
sw.cndr(df['T'],df['P'],df['S'])
而不是使用点符号@maxu@ChesuCR,我无法使用numexpr
使其工作。使用engine='python'
-它工作正常…感谢您的解决方案,但我需要直接在表达式中执行。感谢您的帮助下一步是让我选择表达式中可以使用的函数,因为如果用户可以执行任何函数,它可能是一个安全漏洞