Динамическое чтение файла Excel в Python

Я пытаюсь прочитать Excel, в котором есть несколько пустых строк и столбцов. Процесс усложняется, так как перед заголовком также есть некоторые ненужные значения.

введите здесь описание изображения

В настоящее время я жестко кодирую имя столбца для извлечения таблицы. У этого есть два недостатка: если столбец отсутствует в таблице, и что если имя столбца повторяется в значении столбца. Есть ли способ динамически написать программу, которая автоматически определяет заголовок таблицы и читает таблицу?

фрагмент кода:

raw_data = pd.read_excel('test_data1.xlsx','Sheet8',header=None)

data_duplicate = pd.DataFrame()

for row in range(raw_data.shape[0]): 
    for col in range(raw_data.shape[1]):
        if raw_data.iloc[row,col] == 'Currency':
            data_duplicate = raw_data.iloc[(row+1):].reset_index(drop=True)
            data_duplicate.columns = list(raw_data.iloc[row])
            break
data_duplicate.dropna(axis=1, how='all',inplace=True)
data_duplicate

введите здесь описание изображения

Также не фиксировано количество строк банка + строк мусора перед заголовком.


person MSG    schedule 19.02.2020    source источник
comment
Вы можете использовать pd.read_excel('test_data1.xlsx', 'Sheet8', skiprows=5).   -  person pavel    schedule 19.02.2020
comment
количество строк банка + мусорных строк перед заголовком не фиксировано.   -  person MSG    schedule 19.02.2020
comment
в pyjanitor есть функция - remove_empty(), которая удалит все пустые строки и столбцы. в качестве альтернативы вы можете использовать df.dropna(how='all',axis=0).dropna(how='all',axis=1). функция дворника делает его чище. обнаружение заголовка - другое дело. если идентификатор является частью заголовка, вы можете написать код, который ищет первую строку с идентификатором и назначает эту строку столбцам. опять же, у janitor есть функция row_to_names, которая может помочь в этом. pyjanitor.readthedocs.io/index.html. Попробуйте мои предложения. посмотрим, работает ли это. Иногда Excel может разочаровывать.   -  person sammywemmy    schedule 19.02.2020
comment
Просто дополнение: по возможности избегайте повторения   -  person sammywemmy    schedule 19.02.2020


Ответы (1)


Вот мой способ: вы можете удалить все строки и все столбцы, содержащие Нэн

data = pd.read_excel('test.xlsx')
data = data.dropna(how='all', axis = 1)
data = data.dropna(how='all', axis = 0)
data = data.reset_index(drop = True)

лучше, если вы поместите его в функцию, если вам нужно открыть несколько DataFrame в одном и том же коде:

data = pd.read_excel('test.xlsx')

def remove_nans(df):
    x = df.dropna(how = 'all', axis = 1)
    x = x.dropna(how = 'all', axis = 0)
    x = x.reset_index(drop = True)
    return x

df = remove_nans(data)
print(df)
person Giuseppe    schedule 19.02.2020