我有以下情况:
我有一个包含不同xlsx文件的文件夹,并希望保护不同数据帧(从df2 ...到dfx)中所有xlsx文件的安全。因此,对于每个文件一个数据帧。 例如:df2中的“ Hello.xlsx”,df3中的“ Bye.xlsx” ...
此后,我想在我创建的所有新数据帧上迭代函数“ 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
答案 0 :(得分:0)
我假设您已经具有保存数据帧位,而您只想做变量名部分。
您可以通过以下两种方式使用它:
exec
使用名称的字符串版本并将其作为python代码执行。 第二遍,您应该阅读official docs
编辑:以下操作会将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
等的数据框。
答案 1 :(得分:0)
您可以尝试读取包含子文件夹的目录中的所有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]
希望这可以为您提供帮助:)