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)