Чтение нескольких файлов Excel в python - PullRequest
0 голосов
/ 06 апреля 2020

Пример изображения данных Я новичок в python. Попытка прочитать несколько файлов Excel в папке и разделить их на отдельные кадры.

Правильно ли приведенный ниже код?

import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import sys, os
import matplotlib.pyplot as plt 
from sklearn.model_selection import train_test_split
os.chdir(r'/Users/try/Documents/data')

df = ([])
def readdataframe(the_list):
    for element in the_list:
        print(element)
        df[element] = pd.read_excel(element, 'shee1')

readdataframe(["24032020_D_KWH.xlsx","25032020_D_KWH.xlsx","26032020_D_KWH.xlsx","27032020_D_KWH.xlsx"])

При выполнении я получаю ошибку ниже

TypeError: индексы списка должны быть целыми или кусочками, а не str

1 Ответ

0 голосов
/ 06 апреля 2020

Изменение df = ([]) с помощью df = pd.DataFrame () должно помочь. Вы не определили свой df как pandas фрейм данных.

После теста я пришел к следующему:

import pandas as pd
import os

os.chdir(r"path to your excel files")

the_list = []

for root, dirs, files in os.walk(r"path to your excel files"):
    for file in files:
        if file.endswith('.xlsx'):
            the_list.append(file)

def readdataframe(the_list):
    df = pd.DataFrame() #define df as an empty pandas DataFrame
    for element in the_list:
        #print(element)
        df[element] = pd.read_excel(element, squeeze=True)
    return df

print(readdataframe(the_list))

Вывод:

   file1.xlsx  file2.xlsx  file3.xlsx
0           1           6          11
1           2           7          12
2           3           8          13
3           4           9          14
4           5          10          15

Извините, но скачивать ваши файлы считается плохой практикой, и я не собираюсь его скачивать. Ничего личного, только базовая c цифровая гигиена.

Теперь перейдем к объяснению. Как вы, возможно, заметили в этой строке

df[element] = pd.read_excel(element, squeeze=True)

Я добавил

squeeze = True

Что этот параметр делает, конвертирует фрейм данных это было возвращено в pandas Series (одномерный массив, представьте его как общий список python), потому что у меня был только 1 столбец в каждом из моих файлов и

df [ element] =

Синтаксис устанавливает «элемент» в качестве имени столбца в вашем фрейме данных, в котором вы сохраняете свои данные. Таким образом, этот способ будет работать, только если данные в вашем файле одномерны (только 1 столбец) ) Если нет, то вам, вероятно, следует изучить pandas .concat или pandas Присоединение DataFrame в зависимости от однородности формы данных в файлах и ваших потребностей.

если вы хотите получить несколько фреймов данных, то это то, что я предлагаю.

import pandas as pd
import os

os.chdir(r"path to your excel files")

the_list = []

for root, dirs, files in os.walk(r"path to your excel files"):
    for file in files:
        if file.endswith('.xlsx'):
            the_list.append(file)

def readdataframe(the_list):
    df_dict = {}
    for element in the_list:
        df_dict[element] = pd.read_excel(element)
    return df_dict

print(readdataframe(the_list))

Таким образом, вы получаете python словарь (хеш-таблицу), который содержит ваши объекты фрейма данных в качестве значения и имя файла в качестве ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...