Прочитайте все xlsx-файлы в папке и сохраните файлы в разных фреймах данных - PullRequest
0 голосов
/ 03 июня 2019

У меня следующая ситуация:

  1. У меня есть папка с разными xlsx-файлами и я хочу сохранить все xlsx-файлы в разных фреймах данных (от df2 ... до dfx),Так что для каждого файла один фрейм данных.Например: «Hello.xlsx» в df2, «Bye.xlsx» в df3 ...

  2. После этого я хочу повторить функцию «df1.update (dfx)» поверхвсе новые фреймы данных, которые я создал.

df1 = исходный фрейм данных, который у меня уже есть.

dfx = x обозначает все различные фреймы данных, которые я создал с использованием 1.

Есть несколько решений для 1.

В StackOverflow, но все они сохраняют xlsx-файлы в одном большом фрейме данных.Но это не то, что я хочу.

Спасибо:)

Код, который я "использую" прямо сейчас ":

path = os.getcwd()
files = os.listdir(path)
files

Output: 
['.ipynb_checkpoints',
 'Konsolidierungs-Tool Invoice.ipynb',
 'Test.xlsx',
 'Test1.xlsx',
 'Test2.xlsx',
 'Test3.xlsx']

files_xls = [f for f in files if f[-3:] == 'xlsx']
files_xls

output: [] --> I dont know why it is empty

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Вы можете попробовать это, чтобы прочитать все файлы Excel в каталоге, включая подпапки:

import pandas as pd
import xlrd
import os

# Your current directory (including python script & all excel files)
mydir = (os.getcwd()).replace('\\','/') + '/'

#Get all excel files include subdir
filelist=[]
for path, subdirs, files in os.walk(mydir):
    for file in files:
        if (file.endswith('.xlsx') or file.endswith('.xls') or file.endswith('.XLS')):
            filelist.append(os.path.join(path, file))
number_of_files=len(filelist)
print(filelist)

# Read all excel files and save to dataframe (df[0] - df[x]),
# x is the number of excel files that have been read - 1
df=[]
for i in range(number_of_files):
    try:
        df.append(pd.read_excel(r''+filelist[i]))
    except:
        print('Empty Ecxcel File!')
print(df)

Вывод (в моем примере у меня есть 4 файла Excel, в которых 3 файла Excel хранят номер телефона и 1 файлпусто):

['D:/SOF/Book1.xlsx', 'D:/SOF/Book2.xlsx', 'D:/SOF/a\\New Text Document.xlsx', 'D:/SOF/subdir1\\Book3.xlsx']
Empty Ecxcel File!

[     Name        Phone
0    alfa  82330403045
1    fafa  82330403046
2  albert  82330403047
3    john  82330403048,      

Name    PhoneCell
0    alfa  82330403049
1    fafa  82330403050
2  albert  82330403051
3    john  82330403052,      

Name    PhoneCell
0    alfa  82330403049
1    fafa  82330403050
2  albert  82330403051
3    john  82330403052]

Надеюсь, это поможет вам:)

0 голосов
/ 03 июня 2019

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

Несколько способов работы с этим:

  1. Используйте словарь с ключами в качестве имен dfx и значениями, являющимися фреймами данных
  2. Используйте exec, чтобы использовать строковую версию имен и выполнить ее как код Python.

Во-вторых, вы должны прочитать официальные документы

Редактировать: Следующее должно загрузить ваши файлы xlsx в сериюкадры данных:

import pandas as pd
import os

path = os.getcwd()
files = os.listdir(path)

files_xls = [f for f in files if f[-4:] == 'xlsx']

for index. filename in enumerate(files_xls):
    exec(f"df{index}" = pd.read_excel({filename}, sheet_name=None)" )

После этого вы сможете просматривать кадры данных с именами переменных df0, df1 и т. д.

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