当前位置: 首页 > news >正文

Python将表格文件中某些列的数据整体向上移动一行

本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,对其中的每一个文件加以操作——将其中指定的若干列的数据部分都向上移动一行,并将所有操作完毕的Excel表格文件中的数据加以合并,生成一个新的Excel文件的方法。

  

首先,我们明确一下本文的需求。在一个文件夹内,有大量的Excel表格文件(以.csv格式文件为例),其中每一个文件都有着类似如下图所示的数据特征;我们希望,对于下图中紫色框内的列,其中的数据部分(每一列都有一个列名,这个列名不算数据部分)都向上提升一行(比如原本数据部分的第2行变到第1行,原本第3行变到第2行,以此类推)。

image

由上图也可以看到,需要加以数据操作的列,有的在原本数据部分的第1行就没有数据,而有的在原本的数据部分中第1行也有数据;对于后者,我们在数据向上提升一行之后,相当于原本第1行的数据就被覆盖掉了。此外,很显然在每一个文件的操作结束后,加以处理的列的数据部分的最后一行肯定是没有数据的,因此在合并全部操作后的文件之前,还希望将每一个操作后文件最后一行删除。

  

知道了需求,我们就可以开始代码的撰写;具体代码如下。

# -*- coding: utf-8 -*-
"""
Created on Fri May 19 01:47:06 2023@author: fkxxgis
"""import os
import pandas as pdoriginal_path = "E:/01_Reflectivity/25_2022Data_New"
result_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New"result_df = pd.DataFrame()for file in os.listdir(original_path):if file.endswith(".csv"):df = pd.read_csv(os.path.join(original_path, file))columns_move_index = list(range(8, 16)) + list(range(17, 36))for columns_index in columns_move_index:for i in range(len(df) - 1):df.iat[i, columns_index] = df.iat[i + 1, columns_index]if len(df):df = df.drop(len(df) - 1)# df = df.iloc[ : , 1 : ]result_df = pd.concat([result_df, df])result_df.to_csv(os.path.join(result_path, "Train_Model_0715_Main.csv"), index = False)

其中,original_path表示存放有多个待处理的Excel表格文件的文件夹路径,result_path则是结果Excel表格文件的存放路径。

  

首先,我们通过result_df = pd.DataFrame()创建一个空的DataFrame,用于保存处理后的数据。接下来,遍历原始文件夹中的所有文件,并找到文件夹内以.csv结尾的文件;随后,读取这些.csv文件,并将其保存到df中。

  

其次,我们通过columns_move_index = list(range(8, 16)) + list(range(17, 36))指定需要移动数据的列的索引范围,并随后遍历需要移动数据的列。接下来的df.iat[i, columns_index] = df.iat[i + 1, columns_index]表示将当前行的数据替换为下一行对应的数据。

  

接下来,我们通过if len(df):判断是否DataFrame不为空,如果是的话就删除DataFrame中的最后一行数据;随后,将处理后的DataFrame连接到result_df中。

  

最后,我们通过result_df.to_csv()函数,将最终处理后的DataFrame保存为一个新的Excel表格文件,从而完成我们的需求。

  

至此,大功告成。

文章转载自:疯狂学习GIS

原文链接:https://www.cnblogs.com/fkxxgis/p/18404400

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

http://www.lryc.cn/news/434808.html

相关文章:

  • 基于YOLOv8的PCB缺陷检测算法,加入一种基于内容引导注意力(CGA)的混合融合方案(一)
  • 如何在红米手机中恢复已删除的照片?(6 种方式可供选择)
  • 嵌入式实时操作系统(RTOS):原理、应用与发展
  • C#里使用位图容器BitArray
  • 如何在 Kali Linux 上安装 pip3
  • 5.2 排列与代数余子式
  • java框架第五课(终极版本)SpringBoot
  • 聚类案例——汽车是否值得购买
  • 网络编程9.10
  • 如何在SQL Server中恢复多个数据库?
  • 炸裂!新版 SD WebUI Forge 出图速度更快!支持最新Flux 模型!(保姆级安装教程)
  • laserOdometry.cpp源码注释
  • STM32时钟配置图详解
  • Vscode——调试时,修改变量值
  • 1. 初识LLM API:环境配置与多轮对话演示
  • 【AI编程助手】VsCode插件--通义灵码
  • 9月10号的学习
  • QtC++截图支持窗口获取
  • 料品档案没有配置主供应商信息
  • springboot属性加载优先级和常见命令行属性
  • Math Reference Notes: 因式定理
  • Kubernetes------Service
  • C#的LINQ语句
  • 项目实战系列三: 家居购项目 第三部分
  • 【WPF】Border的使用
  • 机器学习(西瓜书)第 4 章 决策树
  • 8、值、指针、引用作为参数或返回值
  • 向量——通俗地解释
  • 新书宣传:《量子安全:信息保护新纪元》
  • Android Framework(五)WMS-窗口显示流程——窗口布局与绘制显示