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

Pandas筛选22:00-23:00数据时触发SyntaxError语法错误求助

问题分析与修正

核心错误点

  1. 时间解析格式不匹配
    你的CSV中complaint_time是12:22:01 AM这种12小时制带AM/PM的格式,但你用了%H:%M.%S(24小时制、点分隔秒)来解析,完全不匹配,会导致时间转换失败,后续筛选自然出错。正确格式应该是%I:%M:%S %p:

    • %I:12小时制的小时(01-12)
    • %p:AM/PM标识
    • 注意原数据秒部分是冒号分隔,不是点,所以格式字符串里要用冒号连接时分秒。
  2. 筛选条件语法完全错误
    23:00.0.to_datetime()是无效的Python语法,你需要将目标时间转换为可比较的datetime/time对象,同时逻辑条件的写法也不符合规则:

    • 不能连续写<= x & >= y,必须拆分为两个独立条件并分别加括号(因为&优先级高于比较运算符)
    • 需要用pd.Timestamp或datetime构造目标时间,再提取时间部分和complaint_time的时间部分比较。
  3. 可选优化点

    • 直接操作全局字典Dict2不是好的编程习惯,建议在函数内返回结果再赋值
    • late.count()[0]可以用len(late)或late.shape[0]替代,更直观易懂

修正后的完整代码

import pandas as pd
from datetime import datetime

# 读取数据并修正时间解析格式
df = pd.read_csv("nyc_noise_complaints.csv")
df['complaint_time'] = pd.to_datetime(df['complaint_time'], format="%I:%M:%S %p")

# 初始化统计字典
borough_complaints = {}

# 定义统计函数
def count_late_complaints(borough):
    # 筛选22:00-23:00(含22:00,不含23:00)的投诉
    filtered = df.loc[
        (df['borough'] == borough) &
        (df['complaint_time'].dt.hour >= 22) &
        (df['complaint_time'].dt.hour < 23)
    ]
    return len(filtered)

# 遍历所有区统计
for borough in ['BRONX', 'BROOKLYN', 'QUEENS', 'MANHATTAN', 'STATEN ISLAND']:
    borough_complaints[borough] = count_late_complaints(borough)

# 找出投诉最少的区
smallest_borough = min(borough_complaints, key=borough_complaints.get)
print(f"22:00-23:00投诉量最少的区:{smallest_borough},数量:{borough_complaints[smallest_borough]}")

额外说明

  • 如果需要精确到秒的区间(比如22:00:00到23:00:00),可以用时间对象比较:
    start = pd.Timestamp('22:00:00').time()
    end = pd.Timestamp('23:00:00').time()
    filtered = df.loc[
        (df['borough'] == borough) &
        (df['complaint_time'].dt.time >= start) &
        (df['complaint_time'].dt.time <= end)
    ]
    
  • 用dt.hour筛选更简洁,适合只关注小时区间的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:20:29