Как добавить заголовок к фрейму данных (созданному из Excel с помощью «.parse») без перезаписи первой строки в Excel

#python #excel #pandas

#python #преуспеть #pandas

Вопрос:

Я хочу прочитать несколько файлов Excel из нескольких листов и файлов. Самая большая проблема заключается в том, чтобы просто добавить заголовок (поскольку в исходных файлах Excel его нет) в сгенерированный фрейм данных листа, потому что все используемые методы по-прежнему перезаписывают значения в строке / строке 1 (A1, B1 …).

Код на данный момент:

 # before the path was declared 
xl = pd.ExcelFile(file)

# there is additional code above which reads all the files in a folder, selecting the relevant ones and open them
sheetHeader = ["A", "B", "C", "D", "E", "F", "G", "H"]

# rotation through all excel-sheets starts 
for sheetNames in xl.sheet_names:
     df_sheetExtraction = xl.parse(sheet_names = sheetNames, 
                                   header = 0, 
                                   names = sheetHeader)

     #example for asking at the specific cell value
     if df_sheetExtraction["B"][1] == searchedValue:
           pass
     
 

Проблема в качестве примера (в форме списка)…

Excel: [[11, 12, 13, 14 ...],[21, 22, 23, 24 ...], [31, 32, 33, 34 ...] ...]

Фрейм данных: [[A, B, C, D ...], [21, 22, 23, 24 ...], [31, 32, 33, 34 ...] ...]

вместо того , чтобы [[A, B, C, D ...], [11, 12, 13, 14 ...] ...]

Я попробовал это без xl.parse(..., names = ...) и впоследствии добавил столбцы df_sheetExtraction.columns = sheetHeader с тем же результатом. Различные способы использования xl.parse(..., header = ...) не повлияют на целевой результат.

Есть ли способ избежать объединения фрейма данных с отдельным «заголовком-фреймом данных»?

Спасибо за вашу помощь

Комментарии:

1. Дело закрыто … Следующая комбинация (sheet_name=sheetNames, header=None, names=sheetHeader) работает так же, как и приведенный ниже ответ. Резюме: заголовок по умолчанию «отсутствует». Чтобы использовать отдельный заголовок, подобный приведенному выше, вы должны явно установить для него значение «нет».

Ответ №1:

header Параметр говорит (курсив мой):

заголовок: int, список int, строка по умолчанию 0 (с индексом 0), используемая для меток столбцов анализируемого фрейма данных. Если передается список целых чисел, эти позиции строк будут объединены в MultiIndex . Используйте None, если нет заголовка.

Если вы хотите добавить свой собственный список в качестве имен столбцов без замены каких-либо данных в электронной таблице, вы можете задать header=None , а затем имена, такие как

 dfs = pd.read_excel(xlsx_filename,
                       sheet_name=[sheet_name_1,sheet_name_2],
                       header=None,
                       names=['Column_A','Column_B'])
 

Комментарии:

1. Спасибо за вашу помощь. То, как вы описываете, будет работать так, как вы хотели. С другой стороны, это значительно медленнее, чем использование «pd.ExcelFile» и метода «parse» (которые загружают только новый лист в файл). Причина в том, что, напротив, «pd.read_excel (…)» всегда повторно открывает файл excel, переключаясь между листами (по крайней мере, я нашел этот совет в других обсуждениях). Функция должна выполняться через почти 5 тыс. листов (разделенных в разных файлах), но при необходимости она будет работать именно так.