Python Pandas Series of Datetimes to Seconds Since the Epoch

后端 未结 1 1735
一个人的身影
一个人的身影 2021-02-08 20:09

Following in the spirit of this answer, I attempted the following to convert a DataFrame column of datetimes to a column of seconds since the epoch.

df[\'date\'         


        
相关标签:
1条回答
  • 2021-02-08 20:23

    Update:

    In 0.15.0 Timedeltas became a full-fledged dtype.

    So this becomes possible (as well as the methods below)

    In [45]: s = Series(pd.timedelta_range('1 day',freq='1S',periods=5))                         
    
    In [46]: s.dt.components
    Out[46]: 
       days  hours  minutes  seconds  milliseconds  microseconds  nanoseconds
    0     1      0        0        0             0             0            0
    1     1      0        0        1             0             0            0
    2     1      0        0        2             0             0            0
    3     1      0        0        3             0             0            0
    4     1      0        0        4             0             0            0
    
    In [47]: s.astype('timedelta64[s]')
    Out[47]: 
    0    86400
    1    86401
    2    86402
    3    86403
    4    86404
    dtype: float64
    

    Original Answer:

    I see that you are on master (and 0.13 is coming out very shortly), so assuming you have numpy >= 1.7. Do this. See here for the docs (this is frequency conversion)

    In [5]: df = DataFrame(dict(date = date_range('20130101',periods=10)))
    
    In [6]: df
    Out[6]: 
                     date
    0 2013-01-01 00:00:00
    1 2013-01-02 00:00:00
    2 2013-01-03 00:00:00
    3 2013-01-04 00:00:00
    4 2013-01-05 00:00:00
    5 2013-01-06 00:00:00
    6 2013-01-07 00:00:00
    7 2013-01-08 00:00:00
    8 2013-01-09 00:00:00
    9 2013-01-10 00:00:00
    
    In [7]: df['date']+timedelta(hours=2)-datetime.datetime(1970,1,1)
    Out[7]: 
    0   15706 days, 02:00:00
    1   15707 days, 02:00:00
    2   15708 days, 02:00:00
    3   15709 days, 02:00:00
    4   15710 days, 02:00:00
    5   15711 days, 02:00:00
    6   15712 days, 02:00:00
    7   15713 days, 02:00:00
    8   15714 days, 02:00:00
    9   15715 days, 02:00:00
    Name: date, dtype: timedelta64[ns]
    
    In [9]: (df['date']+timedelta(hours=2)-datetime.datetime(1970,1,1)) / np.timedelta64(1,'s')
    Out[9]: 
    0    1357005600
    1    1357092000
    2    1357178400
    3    1357264800
    4    1357351200
    5    1357437600
    6    1357524000
    7    1357610400
    8    1357696800
    9    1357783200
    Name: date, dtype: float64
    

    The contained values are np.timedelta64[ns] objects, they don't have the same methods as timedelta objects, so no total_seconds().

    In [10]: s = (df['date']+timedelta(hours=2)-datetime.datetime(1970,1,1))
    
    In [11]: s[0]
    Out[11]: numpy.timedelta64(1357005600000000000,'ns')
    

    You can astype them to int, and you get back a ns unit.

    In [12]: s[0].astype(int)
    Out[12]: 1357005600000000000
    

    You can do this as well (but only on an individual unit element).

    In [18]: s[0].astype('timedelta64[s]')
    Out[18]: numpy.timedelta64(1357005600,'s')
    
    0 讨论(0)
提交回复
热议问题