# 导入数据包
import pandas as pd
import datetime
import os
import shutil
import os
import re
#----读取文件夹下所有文件的名字并把他们用列表存起来------
path = "C:\\Users\\Thinkpad\\Desktop\\2022黄龙"
datanames = os.listdir(path)
list_date = []
list_name = []
lssp_list_name = [] #临时数据表格中垂直文件
for i in datanames:
#获取文件名称中日期
list_name.append("C:\\Users\\Thinkpad\\Desktop\\2022黄龙\\" + i)
j = str(re.findall('2.*\d+', i))
j = (j[2:12])
j = j.replace("'", '')
lssp_list_name.append("C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果\\" + "水平位移" + j +".xls")
list_date.append(j)
#print(lssp_list_name)
#print(list_date[0])
#-----------------------------------------------
#-----------------------------------------------
# 创建保存临时表格的文件夹----------------------------------------------------
if not os.path.exists('C:\\Users\\Thinkpad\\Desktop\\临时数据表格'):
os.makedirs('C:\\Users\\Thinkpad\\Desktop\\临时数据表格')
else:
#清理历史遗留处理过的文件夹内容
shutil.rmtree('C:\\Users\\Thinkpad\\Desktop\\临时数据表格')
os.makedirs('C:\\Users\\Thinkpad\\Desktop\\临时数据表格')
# 创建保存数据最终处理结果表格的文件夹
if not os.path.exists('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果'):
os.makedirs('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果')
else:
#清理历史遗留处理过的文件夹内容
shutil.rmtree('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果')
os.makedirs('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果')
# ------------------以下部分是对垂直位移数据进行清洗处理------------------------------
rqs = 0
while rqs < len(list_name):
# ----------------------水平位移数据处理代码区域----------------------------------------------------------
# 以下代码获取原始表中的坝顶水平位移的测点、位移量数据并存入临时坝顶水平位移.xls表中
df = pd.read_excel(list_name[rqs], '坝顶水平位移', usecols=[0, 10]) # 读取项目名称和行业领域两列,并不要列名names=None
print(df)
df_li = df.values.tolist()
# print(df_li)
# 对取出3列进行重新命名'测点', '偏离值(mm) ', '位移量(mm)'
df = pd.DataFrame(df_li, columns=['测点', '位移量(mm)'])
df.to_excel("C:\\Users\\Thinkpad\\Desktop\\临时数据表格\\坝顶水平位移.xls", index=False)
data = pd.read_excel('C:\\Users\\Thinkpad\\Desktop\\临时数据表格\\坝顶水平位移.xls') # 打开表格
# 把测点列转化成字符类型
data['测点'] = data['测点'].astype(str)
FF = data.loc[data['测点'].str.startswith('LD')] # 搜索项目名称中等于20开头的值
print(FF)
# 删除未命名列
FF = FF[FF.columns.drop(list(FF.filter(regex='Unnamed')))]
FF.to_excel('C:\\Users\\Thinkpad\\Desktop\\临时数据表格\\坝顶水平位移.xls')
# 以上代码获取原始表中的坝顶水平位移的测点、位移量数据并存入临时坝顶水平位移.xls表中
# 以下代码获取原始表中的马道水平位移的测点、平均值(mm)'数据并存入临时马道水平位移.xls表中
df = pd.read_excel(list_name[rqs], '马道水平位移', usecols=[0, 5]) # 读取项目名称和行业领域两列,并不要列名names=None
print(df)
df_li = df.values.tolist()
# print(df_li)
# 对取出3列进行重新命名'测点', '偏离值(mm) ', '平均值(mm)'
df = pd.DataFrame(df_li, columns=['测点', '位移量(mm)'])
df.to_excel("C:\\Users\\Thinkpad\\Desktop\\临时数据表格\\马道水平位移.xls", index=False)
data = pd.read_excel('C:\\Users\\Thinkpad\\Desktop\\临时数据表格\\马道水平位移.xls') # 打开表格
# 把测点列转化成字符类型
data['测点'] = data['测点'].astype(str)
FF = data.loc[data['测点'].str.startswith('LD')] # 搜索项目名称中等于20开头的值
print(FF)
# 删除未命名列
FF = FF[FF.columns.drop(list(FF.filter(regex='Unnamed')))]
FF.to_excel('C:\\Users\\Thinkpad\\Desktop\\临时数据表格\\马道水平位移.xls')
# 以上代码获取原始表中的马道水平位移的测点、位移量数据并存入临时马道水平位移.xls表中
# 以下代码合并坝顶水平位移、马道水平位移表格数据为一张表水平位移.xls
df = [] # 创建一个空的列表
df.append(pd.read_excel('C:\\Users\\Thinkpad\\Desktop\\临时数据表格\\坝顶水平位移.xls')) # 读取文件夹下所有excel文件
df.append(pd.read_excel('C:\\Users\\Thinkpad\\Desktop\\临时数据表格\\马道水平位移.xls')) # 读取文件夹下所有excel文件
df_concat = pd.concat(df) # excel文件合并
df_concat.to_excel(lssp_list_name[rqs], index=None) # 合并结果存储
# 以上代码合并坝顶水平位移、马道水平位移表格数据为一张表水平位移.xls
# 以下代码对合并的表格按测点名称进行升序排序
# 读取Excel中Sheet1中的数据
FFD = pd.DataFrame(pd.read_excel(lssp_list_name[rqs], 'Sheet1'))
# 从测点列中获取数字用于进行排序
FFD["测点名称取数字"] = FFD.测点.str.extract('(\d+)')
# 把测点名称取数字列转化成数字类型
FFD['测点名称取数字'] = FFD['测点名称取数字'].astype(int)
# 把处理的结果重新保存
FFD.to_excel(lssp_list_name[rqs])
# 重新读取Excel中Sheet1中的数据
FFD = pd.read_excel(lssp_list_name[rqs], 'Sheet1')
FFD = FFD.sort_values(by='测点名称取数字', ascending=True)
# 删除未命名列
FFD = FFD[FFD.columns.drop(list(FFD.filter(regex='Unnamed')))]
# print(FFD)
# 把排序处理的结果重新保存
FFD.to_excel(lssp_list_name[rqs])
# 以上代码对合并的表格按测点名称进行升序排序
# 以下代码对合并的表格进行行列转置
# 读取排序后的表格数据
FFD = pd.DataFrame(pd.read_excel(lssp_list_name[rqs], 'Sheet1'))
# 数据进行转置
FFD = FFD.T
print(FFD)
# 删除未命名列
FFD = FFD[FFD.columns.drop(list(FFD.filter(regex='Unnamed')))]
# 把数据进行转置的结果重新保存
FFD.to_excel(lssp_list_name[rqs])
# 以上代码对合并的表格进行行列转置
# 读取转置后的数据
FFD = pd.DataFrame(pd.read_excel(lssp_list_name[rqs], 'Sheet1'))
# 对列名称进行重新命名
FFD.columns = ['项目名称', "LD1", "LD2", "LD3", "LD4", "LD5", "LD6", "LD7", "LD8", "LD9", "LD10", "LD11", "LD12",
"LD13", "LD14", "LD15", "LD16", "LD17", "LD18"]
# 把重新命名的结果重新保存
# 删除未命名列
FFD = FFD[FFD.columns.drop(list(FFD.filter(regex='Unnamed')))]
FFD.to_excel(lssp_list_name[rqs])
data = pd.read_excel(lssp_list_name[rqs])
##搜索项目名称列中以测点、高程(m)开头的值
FF = data.loc[(data["项目名称"] == "测点") | (data["项目名称"] == "位移量(mm)")]
# 删除未命名列
FF = FF[FF.columns.drop(list(FF.filter(regex='Unnamed')))]
print(FF)
# 保存项目名称列中以测点、位移量(mm)开头的值
FF.to_excel(lssp_list_name[rqs])
#获取#保存项目名称列中以测点、高程(m)开头的数据---------------------------------------------
data = pd.read_excel(lssp_list_name[rqs])
#zfc = str(list_date[0])
#print(type(zfc))
#把高程(m)数据替换成测量高程的日期
data = data.replace('位移量(mm)', str(list_date[rqs]))
# 删除未命名列
data = data[data.columns.drop(list(data.filter(regex='Unnamed')))]
#保存高程(m)替换成日期的数据
data.to_excel(lssp_list_name[rqs])
# ----------------------水平位移数据处理代码区域----------------------------------------------------------
rqs = rqs + 1
# ------------------以上部分是对水平位移数据进行清洗处理------------------------------
# ------------------以下部分是对水平位移清洗后数据进行合并成1张表------------------------------
path = "C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果"
datanames = os.listdir(path)
list_name = []
for i in datanames:
#获取文件名称中日期
list_name.append("C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果\\" + i)
df = [] #创建一个空的列表
k = 0
while k < len(list_name):
df.append(pd.read_excel(str(list_name[k]))) # 读取文件夹下所有excel文件
k = k+1
df_concat = pd.concat(df) #excel文件合并
df_concat.to_excel('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果\\水平位移合并结果.xlsx',index=None) #合并结果存储
data = pd.read_excel('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果\\水平位移合并结果.xlsx') #打开表格
FF = data.loc[data['项目名称'].str.startswith('20')] #搜索项目名称中等于20开头的值
# 删除未命名列
FF = FF[FF.columns.drop(list(FF.filter(regex='Unnamed')))]
# 对列名称进行重新命名
FF.columns = ['日期', "LD1", "LD2", "LD3", "LD4", "LD5", "LD6", "LD7", "LD8", "LD9", "LD10", "LD11", "LD12", "LD13", "LD14", "LD15", "LD16", "LD17", "LD18"]
#print(FF)
FF.to_excel('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果\\水平位移合并结果.xlsx')
# 重新读取水平位移合并结果中Sheet1中的数据并按日期进行排序后保存
CXD = pd.read_excel('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果\\水平位移合并结果.xlsx', 'Sheet1')
# 把日期列从字符类型转成日期类型
CXD['日期'] = pd.to_datetime(CXD['日期'])
CXD['日期'] = pd.to_datetime(CXD['日期']).dt.date
# 按日期进行排序
CXD = CXD.sort_values('日期')
# 删除未命名列
CXD = CXD[CXD.columns.drop(list(CXD.filter(regex='Unnamed')))]
CXD.to_excel('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果\\水平位移合并结果.xlsx')
print("水平位移数据进行清洗处理完成")
# 查看最终合并并按日期进行排序的结果
CXD = pd.read_excel('C:\\Users\\Thinkpad\\Desktop\\数据最终处理结果\\水平位移合并结果.xlsx', 'Sheet1')
print(CXD)