ab_xy
ab_xy

Reputation: 43

How to add seconds in a datetime

I need to add seconds in YYYY-MM-DD-HH-MM-SS. My code works perfectly for one data point but not for the whole set. The data.txt consists of 7 columns and around 200 rows.

import numpy as np
import pandas as pd
from datetime import datetime, timedelta
df = pd.read_csv('data.txt',sep='\t',header=None)
a = np.array(list(df[0]))
b = np.array(list(df[1]))
c = np.array(list(df[2]))
d = np.array(list(df[3]))
e = np.array(list(df[4]))
f = np.array(list(df[5]))
g = np.array(list(df[6]))
t1=datetime(year=a, month=b, day=c, hour=d, minute=e, second=f)
t = t1 + timedelta(seconds=g)
print(t)

Upvotes: 0

Views: 1071

Answers (3)

jezrael
jezrael

Reputation: 863741

You can pass parameter names to read_csv for new columns names in first step and then convert first 5 columns to datetimes by to_datetime and add seconds converted to timedeltas by to_timedelta:

names = ["year","month","day","hour","minute","second","new"]
df = pd.read_csv('data.txt',sep='\t',names=names)

df['out'] = pd.to_datetime(df[names]) +  pd.to_timedelta(df["new"], unit='s')

Upvotes: 1

Rob Raymond
Rob Raymond

Reputation: 31236

  • generating dataset
  • simple to do as pandas series
s = 20
df = pd.DataFrame(np.array([np.random.randint(2015,2020,s),np.random.randint(1,12,s),np.random.randint(1,28,s),
             np.random.randint(0,23,s), np.random.randint(0,59,s), np.random.randint(0,59,s),
             np.random.randint(0,200,s)]).T,
            columns=["year","month","day","hour","minute","second","add"])

pd.to_datetime(df.loc[:,["year","month","day","hour","minute","second"]]) + df["add"].apply(lambda s: pd.Timedelta(seconds=s))


without using apply()

pd.to_datetime(df.loc[:,["year","month","day","hour","minute","second"]]) + pd.to_timedelta(df["add"], unit="s")

Upvotes: 0

Ferris
Ferris

Reputation: 5611

use apply with axis=1 to apply a function to every row of the dataframe.

df.apply(lambda x: datetime(year=x[0],
                            month=x[1],
                            day=x[2],
                            hour=x[3],
                            minute=x[4],
                            second=x[5]) + timedelta(seconds=int(x[6])) , axis=1)

Upvotes: 0

Related Questions