You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除DataFrame中时长列异常值?解决类型转换报错问题

解决Timedelta列类型转换与异常值移除问题

核心问题分析

你现在遇到两个关键问题:

  1. 时长列转整数的代码存在语法错误,逻辑思路不合理;
  2. 直接用Timedelta类型和整数对比触发类型不兼容报错。

一、修复时长列的整数转换

你原来的转换代码里dp是笔误(应为dt),且通过字符串强转整数的思路完全没必要。Pandas的Timedelta类型可以直接提取总秒数/分钟数得到整数:

# 计算时长
df['trip duration'] = df['tpep_dropoff_datetime'] - df['tpep_pickup_datetime']

# 转换为总秒数(整数类型)
df['trip_duration_sec'] = df['trip duration'].dt.total_seconds().astype(int)

# 可选:转换为分钟数整数
# df['trip_duration_min'] = (df['trip duration'].dt.total_seconds() // 60).astype(int)

二、解决异常值过滤的类型错误

Timedelta类型不能直接和整数(比如0)对比,有两种可行方案:

方案1:基于转换后的数值列过滤

用刚才生成的秒数/分钟数列做判断,同时合并距离的过滤条件(避免重复赋值覆盖之前的过滤结果):

# 同时过滤距离<6、时长>0的记录
df_2 = df[(df['trip_distance'] < 6) & (df['trip_duration_sec'] > 0)]

方案2:用pd.Timedelta构造时间对象对比

如果不想额外生成列,直接用pd.Timedelta构造时间阈值和原时长列对比:

df_2 = df[(df['trip_distance'] < 6) & (df['trip duration'] > pd.Timedelta(seconds=0))]

修正后的完整代码

import pandas as pd
import matplotlib.pyplot as plt

# 转换时间列格式
df['tpep_pickup_datetime'] = pd.to_datetime(df['tpep_pickup_datetime'])
df['tpep_dropoff_datetime'] = pd.to_datetime(df['tpep_dropoff_datetime'])

# 计算时长并转换为整数秒数
df['trip duration'] = df['tpep_dropoff_datetime'] - df['tpep_pickup_datetime']
df['trip_duration_sec'] = df['trip duration'].dt.total_seconds().astype(int)

# 绘制距离列箱线图
fig = plt.figure(figsize=(10, 7))
plt.boxplot(df['trip_distance'])
plt.show()

# 绘制时长列箱线图(用转换后的数值列)
fig = plt.figure(figsize=(10, 7))
plt.boxplot(df['trip_duration_sec'])
plt.show()

# 移除异常值
df_2 = df[(df['trip_distance'] < 6) & (df['trip_duration_sec'] > 0)]

内容的提问来源于stack exchange,提问作者H.C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:47:34