我有来自一台设备(树轮仪)安装在9棵不同树木上的数据,变量包括:日期和时间、增长率和温度。我每个月去一次实地,下载更多数据。现在我已经完成了3次野外调查,因此我将文件命名为"den11,den12,den13...",其中第一个数字与树木(编号1)有关,第二个数字与调查(1,2,3)有关。
在连接它们之前,我有几个例程需要运行,以便最终只得到9个文件(dendrom1、dendrom2、dendrom3...),以便进行一些绘图和分析。但是到目前为止,我在我的代码中做了很多复制和粘贴,这需要一段时间,很无聊,看起来也很糟糕。我尝试过for循环,但我是一个Python新手,自学中,这部分我还没掌握。
例如,要读取每个Excel文件,我必须执行以下操作:
如果我只需要添加一个旅行,加载具有新文件名的文件夹并运行代码来生成每个树的合并文件“dendrom”,那将是令人惊奇的。
在连接它们之前,我有几个例程需要运行,以便最终只得到9个文件(dendrom1、dendrom2、dendrom3...),以便进行一些绘图和分析。但是到目前为止,我在我的代码中做了很多复制和粘贴,这需要一段时间,很无聊,看起来也很糟糕。我尝试过for循环,但我是一个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
然后,为了避免针对每个九棵树都重复三次,我尝试重新创建每个文件名并将其分配给“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”,那将是令人惊奇的。