如何修复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
相关产品推荐
相关产品推荐

