python to_datetime时间差类型转换

df["cha"]=pd.to_datetime(df['fromtime'])-pd.to_datetime(df['endTime'])
df['cha]=df[cha].dt.total_seconds() #这里df['cha]打印时间差类型是float64 0.0,-1.0 etc..
if df['cha'].astype("float64")<0: #这里df['cha']打印类型又变成 bool
我怎样才能让df['cha'] 可以与数字比较大小呢,比如df['cha'] <-1 or df['cha']>50 这样,试过强制转换也不成功

计算 pandas DataFrame 中两列之间的时间差,然后将结果与一些数字进行比较。

从你的代码中可以看出,存在一些语法错误。这是更正后的版本:

df["cha"] = pd.to_datetime(df['fromtime']) - pd.to_datetime(df['endTime'])

df["cha"] = df["cha"].dt.total_seconds()

计算以秒为单位的时间差后,你可以像这样比较 cha 列中的值与数字:

df[df["cha"] < -1]

df[df["cha"] > 50]

这将返回 DataFrame 中 cha 列小于 -1 或大于 50 的行。

将时间差转换为整数类型:

df['cha'] = (pd.to_datetime(df['fromtime']) - pd.to_datetime(df['endTime'])).dt.total_seconds().astype(int)

然后使用以下代码将时间差与数字进行比较:

if (df['cha'] < -1) or (df['cha'] > 50):
    # do something

import pandas as pd
df = pd.DataFrame({
    'order_id': [1, 2, 3, 4, 5],
    'customer': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'fromtime': ['2021-05-01 10:00:00', '2021-05-02 11:00:00', '2021-05-03 12:00:00', '2021-05-04 13:00:00', '2021-05-05 14:00:00'],
    'endTime': ['2021-05-01 11:00:00', '2021-05-02 12:00:00', '2021-05-03 13:00:00', '2021-05-04 14:00:00', '2021-05-05 15:00:00']
})
df['cha'] = (pd.to_datetime(df['fromtime'])-pd.to_datetime(df['endTime'])).dt.total_seconds()
df['cha'] = df['cha'].astype('float') # 将cha转换为float类型
df['cha'] = df['cha'].apply(lambda x: x < -1 or x > 50) # 将cha与数字比较大小
print(df)

在将 df['cha'] 的数据类型强制转换为 float64 后,可以将其再转换为 int64 类型,然后再与数字进行大小比较。可以尝试修改代码如下:

df['cha'] = pd.to_datetime(df['fromtime']) - pd.to_datetime(df['endTime'])
df['cha'] = df['cha'].dt.total_seconds().astype('float64').astype('int64')  # 先转为 int64 类型
if (df['cha'] < -1) or (df['cha'] > 50):
    # 做一些操作

在代码中,我们在强制转换类型为 float64 后,再进行强制转换为 int64 类型。这是因为 Python 对比较运算符的支持并不完全,而 int64 和 float64 类型是可以使用比较运算符进行大小比较的,因此我们将 df['cha'] 转换为 int64 类型来进行比较。

你这就是个时间类型转换的问题,相关模块巩固一下就行。下面是建议:
要使 df['cha'] 可以与数字进行比较大小,您可以使用 .dt.total_seconds() 方法将时间差转换为整数类型。同时,确保执行比较操作之前,将其转换为数值类型(例如,浮点数或整数)。

以下是修正后的代码:

df['cha'] = pd.to_datetime(df['fromtime']) - pd.to_datetime(df['endTime'])
df['cha'] = df['cha'].dt.total_seconds().astype('float64')

# 对时间差进行比较
if (df['cha'] < -1) or (df['cha'] > 50):
    # 执行相关操作

请注意,通过调用 .astype('float64'),您可以将时间差的数据类型设置为浮点数。接下来,在 if 语句中,您就可以将 df['cha'] 与数字进行比较,例如 -150
试一下是不是可以了。