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

Python处理波士顿Hubway骑行数据统计早晚骑行数输出0及报错问题

错误原因排查

1. morning/evening输出为0的原因

  • 你通过open("ExData-trips.csv")得到的trip是文件流对象,首次通过for row in trip遍历完成后,文件指针已经移动到文件末尾,后续执行for time in trip时没有任何内容可以读取,循环不会触发,两个计数变量始终为0。
  • 你已经通过列表推导式把转换后的时间存在了ride_times变量中,但后续计数循环没有使用该变量,反而重复读取空的文件流,逻辑错误。

2. Pandas代码报错的原因

你写的pd.to_datetime(trip['start_date']).dt.hour中,trip是原生文件对象,不是Pandas的DataFrame结构,不支持['列名']的下标取值方式,因此抛出_io.TextIOWrapper对象不可取下标的类型错误。

解决方案

方案一:修正原生Python写法

# 需提前确认你自定义的convert、convert_date函数可正常使用
data = []
# 用with上下文管理器自动管理文件关闭,避免资源泄漏
with open("ExData-trips.csv", "r", encoding="utf-8") as trip:
    # 读取表头
    header = trip.readline().split(",")
    # 遍历读取所有数据行
    for row in trip:
        row = row.strip().split(",")
        row = [convert(x) for x in row]
        data.append(row)

# 提取转换后的出发时间
ride_times = [convert_date(row[3]) for row in data]

morning = 0
evening = 0
# 遍历已处理好的时间列表计数
for time in ride_times:
    if time.hour < 12:
        morning += 1
    else:
        evening += 1

print(morning)
print(evening)

方案二:使用Pandas简化实现

import pandas as pd

# 读取CSV文件为DataFrame结构
trip_df = pd.read_csv("ExData-trips.csv")
# 转换出发时间列格式,提取小时字段
trip_df['start_hour'] = pd.to_datetime(trip_df['start_date']).dt.hour
# 分别统计早晚订单量
morning_count = trip_df[trip_df['start_hour'] < 12].shape[0]
evening_count = trip_df[trip_df['start_hour'] >= 12].shape[0]

print(morning_count)
print(evening_count)

内容的提问来源于stack exchange,提问作者jbtrking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:36:02