在python pandas中将天差转换为数值

Pul*_*Jha 1 python datetime-format python-datetime pandas

我的数据框中有一列 'datedif' 为:

  exposuredate min_exposure_date    datedif
  2014-10-08   2014-09-27           11 days
  2014-10-09   2014-09-27           12 days
  2014-09-27   2014-09-27           0 days
  2014-09-27   2014-09-27           0 days
  2014-10-22   2014-09-27           25 days

  data.exposuredate = pd.to_datetime(data.exposuredate)
  data.min_exposure_date = pd.to_datetime(data.min_exposure_date)

  data['datedif'] = ((data.exposuredate)-(data.min_exposure_date))
Run Code Online (Sandbox Code Playgroud)

列的格式为 datetime64[ns]。我想提取“datedif”字段中的天数。我找不到任何可以帮助我提取天数差异的东西。

我试过:

data['datedif_day'] = data['datedif'].dt.days
Run Code Online (Sandbox Code Playgroud)

错误:

AttributeError: 'Series' 对象没有属性 'dt'

Hen*_*k F 7

Pandas Docs 与您正在寻找的转换类型相关,作为频率转换

这两个选项是 1) 除以 Timedelta 或 2) 类型转换。如文档中所述,两者之间存在细微差别:

“请注意,由 numpy 标量除法是真正的除法,而 astyping 相当于楼层除法。”

data = pd.DataFrame([("2014-10-08", "2014-09-27"),
                     ("2014-10-09", "2014-09-27"),
                     ("2014-09-27", "2014-09-27"),
                     ("2014-10-22", "2014-09-27")],
                    columns=["exposuredate", "min_exposure_date"])

data['datediff'] =   pd.to_datetime(data.exposuredate) 
                   - pd.to_datetime(data.min_exposure_date)

data['datediff'] / pd.Timedelta(1, unit='d')
data['datediff'].astype('timedelta64[D]')
Run Code Online (Sandbox Code Playgroud)

两种操作都会产生:

0    11.0
1    12.0
2     0.0
3    25.0
Name: datediff, dtype: float64
Run Code Online (Sandbox Code Playgroud)

如果您使用日期差异作为训练机器学习算法的特征,那么它们以哪种形式表示并不重要,因为无论如何它们都应该被归一化。timedelta64[ns]完全可以。当谈到可视化目的时,请参阅这篇文章