我有一个 Excel 数据 .xslx,有 4 列和许多行,我只想提取第 0 列(即我的波长)和第 3 列(即我的辐射),然后我根据该数据制作了一个 pyplots。我的档案看起来像这样
280.0 8.2000E-02 4.7309E-23 2.5361E-26
280.5 9.9000E-02 1.2307E-21 1.0917E-24
281.0 1.5000E-01 5.6895E-21 6.1253E-24
281.5 2.1200E-01 1.5662E-19 2.7479E-22
282.0 2.6700E-01 1.1946E-18 2.8346E-21
282.5 3.0300E-01 4.5436E-18 1.3271E-20
接下来我想使用 curve_fit 使用普朗克方程将黑体调整为 peplos。 但是当我使用曲线拟合时出现错误:
File"/Applications/Spyder.app/Contents/Resources/lib/python3.9/pandas/core/series.py", line 191, in wrapper
raise TypeError(f"cannot convert the series to {converter}")
TypeError: cannot convert the series to <class 'float'>
当程序尝试计算协方差时会出现此错误。 我尝试使用 astype(float) 更改我的辐射和波长,但它不起作用。
import pandas as pd
import math
import matplotlib.pyplot as plt
import numpy as np
from scipy.constants import h, c, k
from scipy.optimize import curve_fit
Data=pd.read_excel('Sun_Data.xlsx', sheet_name='Spectra',header=2)
#fname='Sun_Data.txt'
#A=np.loadtxt(fname)
wavelength=Data.iloc[:,0].astype(float)
rad=Data.iloc[:,3].astype(float)
#wave=list(wavelength)
#print(wave)
def funcion(wavelegth,T):
planck=(2*math.pi*c**2*h)/(wavelength**5*(math.exp(h*c/(wavelength*k*T))-1))
return planck
#print(funcion(wavelength, rad))
t,cov=curve_fit(funcion, wavelength, rad)
plt.plot(wavelength,rad, color='pink')
plt.show()
我认为我的错误是使用 pandas 读取数据,但我不确定,有人可以吗 帮助我。
看来你应该写
curve_fit(funcion, rad, wavelength)
而不是curve_fit(funcion, wavelength, rad)