我从9棵不同的树中安装的仪器(密度计)获得数据,变量为:日期和时间,增量和温度。我每月去一次现场,下载更多数据。现在我已经完成了3次野外旅行,因此我将文件“ den11,den12,den13 ...”称为与树相关的第一个数字(数字1),而与旅行相关的第二个数字(1、2、3) 。 在连接它们之前,我有一些例程要运行,最后只有9个例程(dendrom1,dendrom2,dendrom3 ...),因此我可以执行一些绘图和分析。但是到目前为止,我已经做了很多复制并粘贴到我的代码中,这花了一段时间,很无聊,看起来很糟糕。我已经尝试过循环,但是我是python新手,自己学习,这一部分我还没破解。
例如,要读取每个excel文件,我必须:
#Tree1
den11= pd.read_excel('den11.xlsx')
den12= pd.read_excel('den12.xlsx')
den13= pd.read_excel('den13.xlsx')
#Tree2
den21= pd.read_excel('den21.xlsx')
den22= pd.read_excel('den22.xlsx')
den23= pd.read_excel('den23.xlsx')
...
#Tree9
然后,为避免对9棵树中的每棵重复3次,我尝试重新创建每个文件名并将其分配给'f':
trips = [1,2,3]
trees = range(1,10)
for tree in trees:
for trip in trips:
f = 'den' + str(tree) + str(trip)
print(f)
然后,我可以阅读它们的每一个,并将它们的名称分配为新变量,但是我显然不好,我在这里缺少了一些东西:
os.chdir('...\Plantation\Dendrometers')
basepath = '...\Plantation\Dendrometers'
dlist = os.scandir(basepath)
for dendrometer in dlist:
f = pd.read_excel(dendrometer)
(我使用'os.scandir'而不是'os.listdir',因为我读到scandir可以插入,我认为这可能是个问题)
它没有用,然后我尝试分配一个带有所有文件名的列表:
flist = ['den11','den12','den13','den21','den22','den23','den31',
'den32','den33','den41','den42','den43','den51','den52',
'den53','den61','den62','den63','den71','den72','den73',
'den81','den82','den83','den91','den92','den93']
那也不起作用,我想我不能用草皮来执行功能。
最好不要对每个文件重复基本例程并为下一个数据做好准备?这是我所做的,感觉很糟糕:
new_columns = ['date','increment','temp']
den11.columns = new_columns
den12.columns = new_columns
den13.columns = new_columns
den21.columns = new_columns
...
den11.set_index('date', inplace=True)
den12.set_index('date', inplace=True)
...
den11 = den11.loc['2019-02-14':]
den12 = den12.loc['2019-02-14':]
...
dendrom1 = pd.concat([den11,den12,den13])
...
dendrom1 = dendrom1.loc[~dendrom1.index.duplicated(keep='first')]
...dendrom9 = dendrom9.loc[~dendrom9.index.duplicated(keep='first')]
如果我可以添加一个旅程,用新的文件名加载文件夹并运行代码以为每棵树生成合并文件'dendrom',那将是惊人的。
答案 0 :(得分:2)
尝试os.listdir
:
d = {}
for i in os.listdir():
if '.xlsx' in i:
df = pd.read_excel(i)
# do all your operations here that you do for every dataframe
...
d[i] = df
要提取特定的数据框,请使用:
print(d[excel file name])
然后它将输出您想要的数据框。