Самый быстрый способ добавить множество файлов Excel в Pandas

У меня много файлов 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.


person sukhwant prafullit    schedule 25.09.2017    source источник
comment
проверьте это: stackoverflow.com/questions/38074678/   -  person Mohamed Ali JAMAOUI    schedule 25.09.2017
comment
Нет данных, нет помощи..   -  person cs95    schedule 25.09.2017
comment
Прикрепленный вопрос, кажется, отличается от моего вопроса. Добавление примера данных, это может помочь.   -  person sukhwant prafullit    schedule 25.09.2017