我们在前一章节中的数据处理里面发现,每一次都需要计算相应的秒作为index来取不同天的不同小时实在太过于复杂,在本文我们试图添加新的时分秒作为新的特征来简化数据处理的困难。
import wntr
import os
#导入
wn = wntr.network.WaterNetworkModel(r'c:\Users\wen EX\Desktop\WNTR-master\examples\networks\Net3.inp')
sim = wntr.sim.EpanetSimulator(wn)
results = sim.run_sim()
link_keys = results.link.keys()#把results.link字典当中的键拿出来,等会儿遍历
node_keys = results.node.keys()
for i in link_keys:
results.link[i].to_csv(r'../dataprocess file/'+i+'.csv')
for j in node_keys:
results.node[j].to_csv(r'../dataprocess file/'+j+'.csv')
如图我们已经实现了将各类数据进行导出,node和link的各类属性也可以分不同文件进行储存。
打开一个文件我们发现,数据的格式不太是我们想要的,数据的第一列是一个colum name为Unname=0的一个以秒为单位的数据:
我们想要添加一些新的列,分别是天数,时间数,周数,小时数,分钟数等的新的特征:
with open(i) as a:
pd_ = pd.read_csv(a)
pd_ = pd.DataFrame(pd_)
#把第一列的名称改成time(s)
pd_.rename(columns={'Unnamed: 0':'time(s)'},inplace=True)
#to_datetime 取出秒为单位的时间 转换格式
time_value = pd.to_datetime(pd_['time(s)'], unit='s')
#增加索引
time_value = pd.DatetimeIndex(time_value)
#增加天 小时 分钟数作为索引
pd_['day'] = time_value.day
pd_['hour'] = time_value.hour
pd_['minute'] = time_value.minute
可以看见我们在列表的最后增加了时间的不同特征:
最后我们想要遍历目录下所有的文件 ,做同样类型的修改,输出到另一个文件中,完成第一步的处理,也就是增加时间特征:
import pandas as pd
import os
all_file = []
#获得当前路径,我们把python文件创建在输出csv文件的目录下
path = os.getcwd()
#os.walk遍历文件内容
list_files = os.walk(path)
for dirpath,dirnames,filenames in list_files:
for dir in dirnames:
all_file.append(os.path.join(dirpath,dir))
for name in filenames:
all_file.append(os.path.join(dirpath,name))
#第一个文件是我们的python文件.py 我们把它弹出
all_file.pop(0)
#储存文件名的列表进行遍历
for i in all_file:
print(i)
#提取文件名 去掉空格 指定分隔符为\ 最后一个元素是文件名
names = i.strip().split('\\')[-1]
print(names)
#读取路径
with open(i) as a:
pd_ = pd.read_csv(a)
pd_ = pd.DataFrame(pd_)
#增加特征
pd_.rename(columns={'Unnamed: 0':'time(s)'},inplace=True)
time_value = pd.to_datetime(pd_['time(s)'], unit='s')
time_value = pd.DatetimeIndex(time_value)
pd_['day'] = time_value.day
pd_['hour'] = time_value.hour
pd_['minute'] = time_value.minute
#输出文件
pd_.to_csv(r'../dataprocessstep1/'+names)