Python Pandas - извлекать данные Excel по индексу столбца и заголовку столбца одновременно - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь написать сценарий Pandas, который извлекает данные из нескольких файлов Excel. Они содержат от 10 до 15 столбцов. Из этих столбцов мне нужен 1-й, который имеет разные заголовки в каждом файле, и некоторые другие столбцы, которые всегда имеют одинаковые имена заголовков ('TOTAL', 'CLEAR', 'NON-CLEAR' и 'SYSTEM'), но они расположены под другим индексом столбца в разных файлах. (Я имею в виду, что в одном из файлов TOTAL - это 3-й столбец в таблице, но в другом файле это 5-й столбец)

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

Можно ли написать оператор, который одновременно принимает 1-й столбец своим index, а затем другие по имени заголовка?

Приведенный ниже оператор не работает:

df = pd.read_excel(file, usecols = [0,'TOTAL', 'CLEAR', 'NON-CLEAR','SYSTEM'])

Ответы [ 3 ]

1 голос
/ 09 июля 2020

вы можете использовать pd.read_excel() дважды, а затем присоединиться к обоим dfs

df1 = pd.read_excel(file, usecols = [0])
df2 = pd.read_excel(file, usecols = ['TOTAL', 'CLEAR', 'NON-CLEAR','SYSTEM'])
df = pd.concat([df1, df2], axis = 1, join = 'outer')
0 голосов
/ 09 июля 2020

Вот go:

def callable():
    first_column = None
    def process(column_name):
        nonlocal first_column
        if first_column is None:
            first_column = column_name
            return True
        if first_column == column_name:
            return True
        return column_name in ['TOTAL', 'CLEAR', 'NON-CLEAR','SYSTEM']
    return process
print(pd.read_csv(file, usecols=callable()))
0 голосов
/ 09 июля 2020

Если в нем всего пятнадцать столбцов, вероятно, лучше не читать файл дважды. Вы можете прочитать весь файл в памяти, а затем извлечь нужные столбцы с помощью более удобного интерфейса pandas:

df = pd.read_excel(file)
df = df[ [ df.columns[0], 'TOTAL', 'CLEAR', 'NON-CLEAR','SYSTEM'] ]
...