Моя конкретная проблема заключается в том, что я не могу преобразовать свои данные в числа с плавающей запятой. У меня есть данные, и я просто хочу подобрать надежную кривую, используя уравнение моей модели:
y = a * e^(-b*z)
Эта поваренная книга является моей ссылкой: нажмите
Ниже моя попытка. Я получаю это:
TypeError: «тип данных не понят»
я считаю, что мои столбцы являются строками, поэтому я попробовал pd.Series.astype()
.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import least_squares
for i in range(1):
def model(z, a, b):
y = a * np.exp(-b * z)
return y
data = pd.read_excel('{}.xlsx'.format(600+i), names = ['EdGnd','380','395','412','443','465','490','510','520','532','555','560','565','589','625','665','670','683','694','710','Temp','z','EdZTemp','Tilt','Roll','EdZVin'])
data.dropna(axis = 0, how = 'any')
data.astype('float')
np.dtype(data)
data.plot.scatter('z','380')
def fun(x, z, y):
return x[0] * np.exp(-x[1] * z) - y
x0 = np.ones(3)
rbst1 = least_squares(fun, x0, loss='soft_l1', f_scale=0.1, args=('z', 'ed380'))
y_robust = model('z', *rbst1.x)
plt.plot('z', y_robust, label='robust lsq')
plt.xlabel('$z$')
plt.ylabel('$Ed$')
plt.legend();
args=('z', '380')
? Должно ли значениеz
иметь значение380
? Оба являются строками, поэтому вы не можете использовать их для умножения. Не могли бы вы предоставить небольшой набор данных для целей отладки?! - person Cleb   schedule 22.10.2018