#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 тыс. листов (разделенных в разных файлах), но при необходимости она будет работать именно так.