pandas 列中的总时间

Total time in pandas column

我正在处理数据框。我的专栏之一是日期时间格式。数据头看起来像这样

0   2022-01-18 15:26:35
1   2022-01-18 15:26:36
2   2022-01-18 15:26:37
3   2022-01-18 15:26:38
4   2022-01-18 15:26:39
Name: filename, dtype: datetime64[ns]

我有一个巨大的数据,并且在某些时候有中断,这意味着,我可能在晚上没有数据,我不希望那个时间被添加到总时间中。我想要以小时为单位的总时间,我试过了

totaltime = df["filename"].sum()
totaltime

我得到一个错误,'DatetimeArray' dtype datetime64[ns] 不支持缩减 'sum'。谁能帮帮我?

IIUC,您想要最大和最小日期之间的小时数:

t = pd.to_datetime(df['filename'])
delta = (t.max()-t.min()).total_seconds()/3600

输出:0.0011

最大和最小日期之间的总时间差。

您的数据:

from datetime import datetime
import time
temp = """
2022-01-18 15:26:35
2022-01-18 15:26:36
2022-01-18 15:26:37
2022-01-18 15:26:38
2022-01-18 15:26:39
"""

temp2 = io.StringIO(temp) 
df = pd.read_csv(temp2, sep="\s",header=None)
df["filename"] = df[0] + " " + df[1]
df = df.drop(columns=[0,1])

# Convert column to datetime datatype
df["filename"] = pd.to_datetime(df["filename"], infer_datetime_format=True)

将它们解析为 strptime,以便您可以减去日期并得到它们之间的 range

maxTime = datetime.strptime(str(df.filename.max()), "%Y-%m-%d %H:%M:%S")
minTime = datetime.strptime(str(df.filename.min()), "%Y-%m-%d %H:%M:%S")

print(f"Range: ",maxTime-minTime)

# Range:  0:00:04

您可以试试下面的代码:

df[['colname']] = df[['colname']].apply(pd.to_datetime)
result = (df['colname'].max() - df['colname'].min()).dt.hour

使用numpy.ptp:

df = pd.read_clipboard(header=None, names=['filename'], sep='\s\s+')`

times = pd.to_datetime(df['filename'])

np.ptp(times)

输出(pd.Timedelta)

Timedelta('0 days 00:00:04')