Python 3.x Can';t转换为使用DataFrame和math.exp错误时给出的浮点错误

Python 3.x Can';t转换为使用DataFrame和math.exp错误时给出的浮点错误,python-3.x,pandas,macos,dataframe,Python 3.x,Pandas,Macos,Dataframe,我正试图让一段更大的代码中的一部分工作,所以我已经提取了问题元素,并创建了一个用于测试的小代码 import math import csv import pandas as pd from pandas import DataFrame print(df) data= pd.read_csv('miniDF.csv') df=pd.DataFrame(data, columns=['x']) df['y']=(12.775*math.exp(-1.494*df['x'])) pri

我正试图让一段更大的代码中的一部分工作,所以我已经提取了问题元素,并创建了一个用于测试的小代码

import math
import csv
import pandas as pd
from pandas import DataFrame
print(df)    

data= pd.read_csv('miniDF.csv')
df=pd.DataFrame(data, columns=['x'])
df['y']=(12.775*math.exp(-1.494*df['x']))

print(df)
df中的x列是0.01,0.1,0.5,1.5,2.9,只是模拟真实数据帧的简单浮点值。如果我在代码中给这个等式一个单独的“x”值,那么数学计算是正确的,但是当从数据帧中提取x值时它就不起作用了。 我得到的shell输出和错误是:

     X
  0  0.01
  1  0.05
  2  0.10
  3  0.15
  4  1.00
  5  2.90
  Traceback (most recent call last):
  File "/Users/willhutchins/Desktop/minitest.py", line 11, in <module>
  df['y']=(12.775*math.exp(-1.494*df['X']))
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/series.py", line 131, in wrapper
raise TypeError("cannot convert the series to " "{0}".format(str(converter)))
TypeError: cannot convert the series to <class 'float'>
X
0  0.01
1  0.05
2  0.10
3  0.15
4  1.00
5  2.90
回溯(最近一次呼叫最后一次):
文件“/Users/willhutchins/Desktop/minitest.py”,第11行,在
df['y']=(12.775*math.exp(-1.494*df['X']))
包装器中的文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site packages/pandas/core/series.py”,第131行
raise TypeError(“无法将序列转换为”{0}”。格式(str(converter)))
TypeError:无法将序列转换为
最后,我想这样使用它:

df['SBTn']=np.where(df['Fr']<=(12.775*math.exp(-1.494*(df['Fr']))),1,df['SBTn'])
df['SBTn']=np.where(df['Fr']使用方法处理数组,
math.exp
处理标量:

import numpy as np

df['y']=(12.775*np.exp(-1.494*df['x']))
print (df)
      x          y
0  0.01  12.585560
1  0.05  11.855479
2  0.10  11.002144
3  0.15  10.210230
4  1.00   2.867642
5  2.90   0.167779
您可以为
math.exp
循环使用
apply
,但速度较慢:

df['y']=(12.775*df['x'].apply(lambda x: math.exp(-1.494*x)))
print (df)
      x          y
0  0.01  12.585560
1  0.05  11.855479
2  0.10  11.002144
3  0.15  10.210230
4  1.00   2.867642
5  2.90   0.167779

#6k rows
df = pd.concat([df] * 1000, ignore_index=True)

In [14]: %timeit df['y1']=(12.775*np.exp(-1.494*df['x']))
658 µs ± 19.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [15]: %timeit df['y2']=(12.775*df['x'].apply(lambda x: math.exp(-1.494*x)))
3.2 ms ± 133 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)