Python/Pandas:TypeError:float()参数必须是字符串或数字,而不是“function”

2024-10-01 22:27:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从.csv文件中的两列生成绘图。x轴的列采用短日期格式mm/dd/yyyy,而y轴的列对应于吸收测量数据作为常规数值。从这里,我还试图从这个图中收集一条线性回归线。以下是我到目前为止的情况:

mydateparser = lambda x: datetime.strptime(x, '%m/%d/%y')

df = (pd.read_csv('calibrationabs200211.csv', index_col=[], parse_dates=[0],
                  infer_datetime_format=True, date_parser=mydateparser))

if mydateparser == '%m/%d/%y':
    print('Error')
else:
    mydateparser = float(mydateparser)

plt.figure(figsize=(15,7.5))

x = df.iloc[:, 0].values.reshape(-1, 1)
y = df.iloc[:, 1].values.reshape(-1, 1)
linear_regressor = LinearRegression()
linear_regressor.fit(x, y)
y_pred = linear_regressor.predict(y)

plt.scatter(x, y, color='teal')
plt.plot(x, y_pred, color='teal')

plt.show()

但是,我收到一条错误消息:

TypeError                                 Traceback (most recent call last)
<ipython-input-272-d087bdc00150> in <module>
     12     print('Error')
     13 else:
---> 14     mydateparser = float(mydateparser)
     15 
     16 plt.figure(figsize=(15,7.5))

TypeError: float() argument must be a string or a number, not 'function'

此外,如果我注释掉if语句,我最终会得到一个情节,but with a faulty linear regression.我对python、matplotlib和pandas相当陌生,因此非常感谢任何帮助或反馈。谢谢大家!


Tags: csvdfdatetimeifplterrorfloatelse
3条回答

在代码的开头,您将mydateparser声明为lambda函数。 但是float()函数只接受字符串或数字

我假设您使用日期列作为线性回归模型的一个特性,这是没有意义的

相反,您可以派生新的功能,如月份、年份、日期、工作日/周末,以用于线性回归

如果你想预测下一个日期的价值,你可以看看时间序列预测模型

Python中的函数可以用作变量,这就是您在这里要做的。如果要将函数的结果用于某个对象,则需要通过在函数名后添加()来调用它

mydateparser是一个函数,mydateparser()是调用该函数的结果

此外,我认为你所做的比较没有意义。datetime.strTime返回一个datetime对象,稍后将其与字符串进行比较。事实上,我根本不知道你想用那块石头做什么

您的回归需要将日期转换为某种数值进行回归。我建议使用matplotlib的日期转换函数,特别是date2num,来尝试这一点

应该是以下几点:

from matplotlib import dates
...
x = df[0].apply(dates.date2num)

必须调用lambda才能使其正常工作

相关问题 更多 >

    热门问题