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

时间:2015-01-27 14:08:12

标签: python pandas datetime-format python-datetime

我的数据框中有一个'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))

列的格式为datetime64 [ns]。我想提取字段'datedif'中的天数。我无法找到任何可以帮助我提取天数差异的内容。

我试过了:     data ['datedif_day'] = data ['datedif']。dt.days

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

3 个答案:

答案 0 :(得分:3)

'datedif'以天的形式显示,但实际上是以秒为单位。因此,为了获得更多天数,请在代码中添加以下行:    data ['datedif'] = data ['datedif']。astype(np.numpy64)    data ['datedif_day'] =(data ['datedif'] / 86400000000000)

答案 1 :(得分:2)

Pandas文档与您要查找的转化类型相关Frequency Conversion

这两个选项是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]')

两种操作均产生:

0    11.0
1    12.0
2     0.0
3    25.0
Name: datediff, dtype: float64

如果您使用日期差异作为训练机器学习算法的功能,那么它们表示的形式并不重要,因为无论如何它们应该被标准化。 timedelta64[ns]对此完全没问题。在可视化方面,请参阅this post

答案 2 :(得分:1)

今天也遇到同样的问题,我认为以下甜蛋白最简单:

设置:

df = 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"])

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

    exposuredate    min_exposure_date   datediff
0   2014-10-08      2014-09-27          11 days
1   2014-10-09      2014-09-27          12 days
2   2014-09-27      2014-09-27          0 days
3   2014-10-22      2014-09-27          25 days

解决方案:

df.datediff.apply(lambda x: x.days)

0    11
1    12
2     0
3    25
Name: datediff, dtype: int64