我有一堆不同年份的 CSV 文件,名为 my_file_2019、my_file_2020、my_file_2023 等。有些文件有制表符分隔符,而另一些文件则有分号。
我想编写一个通用函数来从所有文件中提取数据。
这是我最初的功能:
def get_data(year):
file = f"my_file_{year}.csv"
df = pd.read_csv(file,
sep = "\t")
#filter for germany
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)
当分隔符不同时,我收到 KeyError: 'CountryCode'。
我使用了如图所示的 try except 方法
def get_data(year):
file = f"my_file_{year}.csv"
try:
df = pd.read_csv(file,
sep = "\t")
except KeyError:
df = pd.read_csv(file,
sep = ";")
#filter for germany
df = df[df["CountryCode"] == "DE"]
return df
那么当分隔符是制表符但不是分号时我仍然可以读取文件。
我该如何解决这个问题?
出现此问题是因为
try-except
块正在捕获 KeyError
,这与 DataFrame 操作有关,而不是读取 CSV 时的分隔符问题。
试试这个代码:
import pandas as pd
def get_data(year):
file = f"my_file_{year}.csv"
try:
df = pd.read_csv(file, sep='\t')
except pd.errors.ParserError:
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)