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

如何修复Python Pandas读取不同分隔符CSV文件的函数?

修复读取不同分隔符CSV文件的函数问题

问题背景

有一批命名格式为my_file_YYYY.csv的CSV文件,部分文件用制表符(\t)作为分隔符,另一部分用分号(;)。初始函数固定用\t读取,遇到分号分隔的文件时会触发KeyError: 'CountryCode';修改后的try-except代码仍无法正常读取分号分隔的文件。

错误原因

原修改后的代码逻辑有误:用错误的分隔符(比如用\t读分号文件)时,pd.read_csv不会抛出KeyError——它会把整行内容识别为单个列(列名就是第一行的完整内容),直到执行df["CountryCode"]过滤时才会触发KeyError,但这个错误不在try代码块范围内,所以except分支根本不会执行,导致始终用错误的读取结果去过滤。

修复方案

方案一:检查列名是否存在

先尝试用制表符读取,读取后检查目标列CountryCode是否存在,不存在则换分号重新读取:

import pandas as pd

def get_data(year):
    file = f"my_file_{year}.csv"
    
    # 先尝试制表符分隔读取
    df = pd.read_csv(file, sep="\t")
    # 检查目标列是否存在,不存在则换分隔符
    if "CountryCode" not in df.columns:
        df = pd.read_csv(file, sep=";")
    
    # 过滤德国数据
    df = df[df["CountryCode"] == "DE"]
    return df

方案二:调整try-except范围

把读取后检查列的逻辑也放入try块,捕获可能的KeyError,触发后换分隔符读取:

import pandas as pd

def get_data(year):
    file = f"my_file_{year}.csv"
    
    try:
        df = pd.read_csv(file, sep="\t")
        # 主动尝试访问目标列,触发可能的KeyError
        df["CountryCode"]
    except KeyError:
        df = pd.read_csv(file, sep=";")
    
    # 过滤德国数据
    df = df[df["CountryCode"] == "DE"]
    return df

调用方式

依然可以按原方式调用:

df_2019 = get_data(2019)
df_2020 = get_data(2020)
df_2021 = get_data(2021)
df_2022 = get_data(2022)
df_2023 = get_data(2023)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:17:15