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']
与数字进行比较,例如 -1
和 50
。
试一下是不是可以了。