python 批量获取文件夹下所有表格,进行批量处理成一张表格,后进行批量处理并按表格时间进行排序,排序后由列转成行

# 导入数据包
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)


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字化信息化智能化解决方案

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值