У меня много файлов excel (около 30 тыс.), Каждый из них имеет атрибуты элементов (один excel с 3 тыс. строк в каждом). Есть несколько столбцов, которые существуют во всех файлах Excel. Кроме того, есть еще столбцы, которых может не быть во всех из них. Я хочу объединить их в один фрейм данных.
Я попытался использовать pandas.read_excel для чтения каждого фрейма данных, а затем объединить их через pandas.append, это не только очень медленно, но и не работает для некоторых файлов.
Используемый код:
all_data = pd.DataFrame()
dfs = []
for f in glob.glob("sheets_*.xlsx"):
temp = pd.read_excel(f, sheetname='ItemDetail', skiprows=[0, 2],index_col=0)
temp = clean_data(temp) # Do some cleaning here.
dfs.append(temp)
all_data = all_data.append(dfs,ignore_index=True)
Пример:-
Эксель 1
| Item Id | Source | country | Item Name |Item Weight |Cost |
----------------------------------------------------------------------
| 1 | x | India | Pen | 10 | 100 |
| 2 | y | Australia | Pencil | 15 | 50 |
| 3 | x | Germany | Eraser | 5 | 20 |
| 4 | y | India | Box | 80 | 200 |
----------------------------------------------------------------------
Эксель 2
| Item Id | Source | country | Item Name |Item Weight |Length| Width |
|-----------------------------------------------------------------------------|
| 1 | x | Australia | chair | 100 | 20 | 26 |
| 2 | y | Australia | cupboard | 150 | 30 | 40 |
| 3 | x | Germany | Table | 500 | 60 | 50 |
| 4 | y | Germany | Tool | 360 | 20 | 80 |
|-----------------------------------------------------------------------------|
Окончательные объединенные данные:
| Item Id | Source | country | Item Name |Item Weight |Length| Width | Cost |
|------------------------------------------------------------------------------------|
| 10 | x | Australia | chair | 100 | 20 | 26 | NAN |
| 26 | y | Australia | cupboard | 150 | 30 | 40 | NAN |
| 38 | x | Germany | Table | 500 | 60 | 50 | NAN |
| 41 | y | Germany | Tool | 360 | 20 | 80 | NAN |
| 1 | x | India | Pen | 10 | NAN | NAN | 100 |
| 2 | y | Australia | Pencil | 15 | NAN | NAN | 50 |
| 3 | x | Germany | Eraser | 5 | NAN | NAN | 20 |
| 4 | y | India | Box | 80 | NAN | NAN | 200 |
|------------------------------------------------------------------------------------|
Обратите внимание, что в этом примере есть столбцы, такие как идентификатор товара, источник и страна, которые присутствуют во всех из них, но эти столбцы могут присутствовать не во всех из них.
Также количество столбцов в исходных данных составляет около 150. Количество строк на каждом листе составляет около 3000, а таких листов у меня около 35 тысяч. Поэтому я ищу лучший способ загрузить все эти данные в pandas.