如何在日期时间中添加秒数



我需要在YYYY-MM-DD-HH-MM-SS中添加秒数。我的代码对一个数据点完美地工作,但对整个数据集却不行。data.txt由7列约200行组成。

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)

您可以在第一步将参数names传递给read_csv以获取新列名,然后通过to_datetime将前5列转换为日期时间,并添加由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')

使用applyaxis=1对数据框的每一行应用一个函数。

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)
  • 生成数据集
  • 简单的做熊猫系列
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))

不使用apply()

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

最新更新