如何用Python编写一个函数来读取pandas中具有不同分隔符的csv文件?

问题描述 投票:0回答:1

我有一堆不同年份的 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
    

那么当分隔符是制表符但不是分号时我仍然可以读取文件。

我该如何解决这个问题?

python python-3.x pandas dataframe filter
1个回答
0
投票

出现此问题是因为

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)

© www.soinside.com 2019 - 2024. All rights reserved.