python - pandas.datetime64 值的线性拟合?
问题描述
我有一个包含两列(年龄,日期)的数据框,表示一个人的年龄和当前日期。我想从该数据中估算出生日期。我想拟合一个线性模型并找到与 的截距,但它不能开箱即用。Pandas 不再支持该ols()
功能。
import pandas as pd
import seaborn as sns
from pandas import Timestamp
age = [30, 31, 31, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 34, 34]
date = [Timestamp('2001-02-10 00:01:00'),
Timestamp('2001-11-12 00:01:00'),
Timestamp('2002-02-27 00:01:00'),
Timestamp('2002-07-05 00:01:00'),
Timestamp('2002-07-20 00:01:00'),
Timestamp('2002-08-15 00:01:00'),
Timestamp('2002-09-08 00:01:00'),
Timestamp('2002-10-15 00:01:00'),
Timestamp('2002-12-21 00:01:00'),
Timestamp('2003-04-04 00:01:00'),
Timestamp('2003-07-29 00:01:00'),
Timestamp('2003-08-11 00:01:00'),
Timestamp('2004-02-28 00:01:00'),
Timestamp('2005-01-11 00:01:00'),
Timestamp('2005-01-12 00:01:00')]
df = pd.DataFrame({'age': age, 'date': date})
sns.regplot(df.age, df.date)
引发错误:
TypeError:此 dtype 不允许归约操作 'mean'
将数据转换为可以拟合的数据并将其转换回日期并估计置信区间的最佳方法是什么?有没有可以开箱即用处理 pandas.Timestamps 的包?例如 scikit-learn?
解决方案
用于pd.to_numeric
转换为 unix 时间,在本例中为自 1970-01-01 以来的纳秒数。
import pandas as pd
df['date'] = pd.to_numeric(df.date)
sns.regplot(df.age, df.date)
然后,您可以轻松地将其转换回日期pd.to_datetime()
。
示例:这是一个简单的线性拟合
import numpy as np
df['date'] = pd.to_numeric(df.date)
fit = np.polyfit(df.age, df.date, 1)
# Here's the predicted Birthday in unix time
np.polyval(fit, 0)
#4.966460634146548e+16
# Here's the same result transformed to a date.
pd.to_datetime(np.polyval(fit,0))
#Timestamp('1971-07-29 19:43:26.341465480')
推荐阅读
- javascript - 使用 .addEventListener 更改框的背景颜色
- java - 对流降序排序
- html - 如何使链接和文本处于同一级别
- javascript - 传单添加动态图层和标记到图层
- php - 尝试在 Laravel 中访问 Google Sheets API 时出现“请求缺少有效的 API 密钥”
- django - NoReverseMatch at / Reverse for 'product' 未找到任何参数。尝试了 1 种模式:['product/(?P
[-a-zA-Z0-9_]+)/$'] - java - $JAVA_HOME 设置不正确
- docker - 如何从 docker compose 文件中找到支持的架构?
- python-3.x - 希望使用 GitPython 在 Lambda 中克隆存储库
- ios - 另一个 ViewController 中的 UILabel.text 返回 nil