Python применяет функцию к нескольким фреймам данных с разной структурой данных

#python #pandas

#python #pandas

Вопрос:

Я понимаю, что это может быть глупый вопрос. У меня есть вызываемая функция read_files() , которая считывает два фрейма данных pandas, но структура данных немного отличается в каждом фрейме данных. Отсюда разные header, index_col, sheet_name и т. Д. для каждого фрейма данных.

Есть ли какой-либо способ переписать эту функцию, чтобы она была короче или более питонической?

   def read_files():
    input_location = r'C:UsersnameDesktopfoobar\'

    df1 = pd.read_excel(
                          input_location 'example1.xlsx', 
                          sheet_name='foo',
                          header=8,
                          index_col=2,
                       )
    
    df2 = pd.read_excel(
                          input_location 'example2.xlsx', 
                          header=11,
                          index_col=1,
                          skipfooter=10
                        )

    return df1, df2
  

Ответ №1:

Вы можете, например, сохранить свои параметры в dict, заданном именем файла

 read_excel_params = {
    'example1.xlsx':dict( header=11,
                          index_col=1,
                          skipfooter=10),
    'example2.xlsx':dict(header=11,
                          index_col=1,
                          skipfooter=10)
}
  

а затем вызовите

 df1 = pd.read_excel(input_location 'example1.xlsx', **read_excel_params['example1.xlsx'])
df2 = pd.read_excel(input_location 'example1.xlsx', **read_excel_params['example2.xlsx'])
  

Вы можете вставить первый аргумент как в словарь, так и в lo=input_location 'example1.xlsx , но вам нужно быть осторожным, чтобы инициализировать input_location в нужный момент, прежде чем словарь будет создан

Конфигурационный словарь может быть заполнен вне вашей read_files() функции и передан в качестве аргумента этой функции. Вы даже можете перебирать разные записи в dict и вызывать read_excel в цикле, без явного вызова read_excel вашей функции для каждого файла.