pandas convert from datetime to integer timestamp

74,188

Solution 1

You can typecast to int using astype(int) and divide it by 10**9 to get the number of seconds to the unix epoch start.

import pandas as pd
df = pd.DataFrame({'time': [pd.to_datetime('2019-01-15 13:25:43')]})
df_unix_sec = pd.to_datetime(df['time']).astype(int)/ 10**9
print(df_unix_sec)

Solution 2

The easiest way is to use .value

pd.to_datetime('1970-01-01').value

If you want to apply it to the whole column, just use .apply:

df['time'] = df['time'].apply(lambda x: x.value)

Solution 3

Use .dt.total_seconds() on a timedelta64:

import pandas as pd
df = pd.DataFrame({'time': [pd.to_datetime('2019-01-15 13:25:43')]})

# pd.to_timedelta(df.time).dt.total_seconds() # Is deprecated
(df.time - pd.to_datetime('1970-01-01')).dt.total_seconds()

Output

0    1.547559e+09
Name: time, dtype: float64

Solution 4

As @Ignacio recommends, this is what I am using to cast to integer:

df['time'] = df['time'].apply(lambda x: x.value)

Then, to get it back:

df['time'] = df['time'].apply(pd.Timestamp)
Share:
74,188
Francesco Boi
Author by

Francesco Boi

Interested in programming, electronic, math, physics and technology. In my free-time I like playing sports, going to the sea, watching movies and reading.

Updated on October 28, 2021

Comments

  • Francesco Boi
    Francesco Boi over 2 years

    Considering a pandas dataframe in python having a column named time of type integer, I can convert it to a datetime format with the following instruction.

    df['time'] = pandas.to_datetime(df['time'], unit='s')
    

    so now the column has entries like: 2019-01-15 13:25:43.

    What is the command to revert the string to an integer timestamp value (representing the number of seconds elapsed from 1970-01-01 00:00:00)?

    I checked pandas.Timestamp but could not find a conversion utility and I was not able to use pandas.to_timedelta for this.

    Is there any utility for this conversion?