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

从字典读取城市数据时Pandas报NameError,如何批量读取多城市数据?

批量读取城市CSV数据:解决重复代码与NameError问题

嘿,我来帮你梳理下问题并给出修复方案。先看看你原代码里的几个核心问题:

  • 重复冗余代码:你重复导入了csv模块三次,还用csv.reader读取了三个文件,但后面完全没用到这些读取结果,直接用了pandas的read_csv,这部分代码完全是多余的。
  • NameError问题:CITY_DATA[city]里的city变量根本没定义,Python不知道你要取哪个城市的文件名,自然会报错。
  • 无批量处理逻辑:你分别写了三次文件读取,没法高效处理所有城市数据。

下面是修复后的完整代码,我会一步步解释:

import pandas as pd
import numpy as np
import os

# 定义城市与文件名的映射,把基础路径单独提取出来,方便后续维护
BASE_PATH = 'C:\\Users\\jasch\\'
CITY_DATA = {
    'chicago': 'chicago.csv',
    'new york city': 'new_york_city.csv',
    'washington': 'washington.csv'
}

# 创建字典存储每个城市处理后的DataFrame,方便后续调用
city_dfs = {}

# 遍历所有城市,批量完成读取与数据处理
for city_name, file_name in CITY_DATA.items():
    # 拼接完整文件路径,避免硬编码重复路径
    full_path = os.path.join(BASE_PATH, file_name)
    # 读取CSV文件
    df = pd.read_csv(full_path)
    # 统一处理时间列并提取月份
    df['Start Time'] = pd.to_datetime(df['Start Time'])
    df['month'] = df['Start Time'].dt.month
    # 将处理好的DataFrame存入字典
    city_dfs[city_name] = df
    # 打印当前城市的月份数据(可选,用于验证结果)
    print(f"--- {city_name} 的月份数据 ---")
    print(df['month'])

关键改进点说明:

  1. 清理冗余代码:删掉了没用的csv模块导入和csv.reader读取逻辑,只保留pandas相关处理(毕竟你后续用的是pandas)。
  2. 修复NameError:通过遍历CITY_DATA.items(),直接获取每个城市的名称和对应文件名,再也不需要单独定义未赋值的city变量。
  3. 批量处理逻辑:用循环一次性处理所有城市,避免重复写三次读取代码,后续新增城市只需在CITY_DATA里加一行即可。
  4. 路径优化:把基础路径单独提取,用os.path.join拼接完整路径,比硬编码全路径更灵活,也减少拼写错误概率。
  5. 统一存储:每个城市的处理后数据存在city_dfs字典里,后续调用某城市数据直接用city_dfs['chicago']就能拿到对应的DataFrame。

如果只是想单独处理某个城市,也可以这样写(不会触发NameError):

target_city = 'chicago'
df = pd.read_csv(os.path.join(BASE_PATH, CITY_DATA[target_city]))
# 后续时间处理等逻辑...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:48