Python自动复制Excel数据:将各行分别重复指定次数

news/2024/10/2 11:45:01

  本文介绍基于Python语言,读取Excel表格文件数据,并将其中符合我们特定要求那一行加以复制指定的次数,而不符合要求那一行则不复制;并将所得结果保存为新的Excel表格文件的方法。

  这里需要说明,在我们之前的文章多次复制Excel符合要求的数据行:Python批量实现中,也介绍过实现类似需求的另一种Python代码,大家如果有需要可以查看上述文章;而上述文章中的代码,由于用到了DataFrame.append()这一个在最新版本pandas库中取消的方法,因此有的时候可能会出现报错的情况;且本文中的需求较之上述文章有进一步的提升,因此大家主要参考本文即可。

  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件,在本文中我们就以.csv格式的文件为例;其中,如下图所示,这一文件中有一列(也就是inf_dif这一列)数据比较关键,我们希望对这一列数据加以处理——对于每一行,如果这一行的这一列数据的值在指定的范围内,那么就将这一行复制指定的次数(复制的意思相当于就是,新生成一个和当前行一摸一样数据的新行);而对于符合我们要求的行,其具体要复制的次数也不是固定的,也要根据这一行的这一列数据的值来判断——比如如果这个数据在某一个值域内,那么这一行就复制10次;而如果在另一个值域内,这一行就复制50次等。

image

  知道了需求,我们就可以开始代码的书写。其中,本文用到的具体代码如下所示。

# -*- coding: utf-8 -*-
"""
Created on Thu Jul  6 22:04:48 2023@author: fkxxgis
"""import numpy as np
import pandas as pd
import matplotlib.pyplot as pltoriginal_file_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New/Train_Model_0715.csv"
result_file_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New/Train_Model_0715_Over_NIR_0717_2.csv"df = pd.read_csv(original_file_path)
duplicated_num_0 = 70
duplicated_num_1 = 35
duplicated_num_2 = 7
duplicated_num_3 = 2num = [duplicated_num_0 if (value <= -0.12 or value >= 0.12) else duplicated_num_1 if (value <= -0.1 or value >= 0.1) \
else duplicated_num_2 if (value <= -0.07 or value >= 0.07) else duplicated_num_3 if (value <= -0.03 or value >= 0.03) \
else 1 for value in df.inf_dif]
duplicated_df = df.loc[np.repeat(df.index.values, num)]plt.figure(0)
plt.hist(df["inf_dif"], bins = 50)
plt.figure(1)
plt.hist(duplicated_df["inf_dif"], bins = 50)duplicated_df.to_csv(result_file_path, index=False)

  其中,上述代码的具体含义如下。

  首先,我们需要导入所需的库,包括numpypandasmatplotlib.pyplot等,用于后续的数据处理和绘图操作。接下来,即可开始读取原始数据,我们使用pd.read_csv()函数读取文件,并将其存储在一个DataFrame对象df中;这里的原始文件路径由original_file_path变量指定。

  随后,我们开始设置重复次数。在这里,我们根据特定的条件,为每个值设定重复的次数。根据inf_dif列的值,将相应的重复次数存储在num列表中。根据不同的条件,使用条件表达式(if-else语句)分别设定了不同的重复次数。

  接下来,我们使用loc函数和np.repeat()函数,将数据按照重复次数复制,并将结果存储在duplicated_df中。

  最后,为了对比我们数据重复的效果,可以绘制直方图。在这里,我们使用matplotlib.pyplot库中的hist()函数绘制了两个直方图;其中,第一个直方图是原始数据集dfinf_dif列的直方图,第二个直方图是复制后的数据集duplicated_dfinf_dif列的直方图。通过指定bins参数,将数据分成50个区间。

  完成上述操作后,我们即可保存数据。将复制后的数据集duplicated_df保存为.csv格式文件,路径由result_file_path变量指定。

  执行上述代码,我们将获得如下所示的两个直方图;其中,第一个直方图是原始数据集dfinf_dif列的直方图,也就是还未进行数据复制的直方图。

  其次,第二个直方图是复制后的数据集duplicated_dfinf_dif列的直方图。

  可以看到,经过前述代码的处理,我们原始的数据分布情况已经有了很明显的改变。

  至此,大功告成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/55352.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

统信UOS系统常见故障及处理方法

一、系统及软件使用: 统信下载软件方法: 统信系统由于和Windows系统内核不同,不能直接安装互联网上Windows系统的exe文件,需要下载适合系统本身的软件,且互联网上很难找到对应的软件,但统信系统内置了应用商店程序,如需安装软件在“应用商店”下载。点击左下角的启动器,…

四元数

四元数 定义 【四元数的可视化】 https://www.bilibili.com/video/BV1SW411y7W1/?share_source=copy_web&vd_source=ac806c24de13bf5f509bf105a8578e24 \[0.00 + 8.46i + 2.64j + 3.38k\\ \]最左侧实数称为标量部分,右侧\(ijk\)虚部称为向量vector \[i^2+j^2+k^2=1\\ ij=…

GAMES102 Lecture 01

Lecture 01图像是离散的像素图形是具有数学意义的点、线、面,是连续的,有数学表达的渲染是在解积分方程仿真是在解偏微分方程函数拟合 线性空间元素之间有运算:加法、数乘 线性结构:对加分和数乘封闭加法交换律、结合了、数乘分配律基/维数:\(L=span\{V_1,V_2,...,V_N\} =…

乡味

今天又吃到了小时候的五仁月饼,香得很。前天是外公的忌日,老妈回去看他们的时候从小镇给我买的。 小时候,我家房后就是一家食品加工厂,做蛋糕做月饼。印象中每年中秋那一段时间,我家那一片儿总是弥漫着甜丝丝的味道。那会儿我总是盼着,盼望着中秋啥时候来啊,外婆啥时候来…

scroll相关

本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/p/18391275

nodejs起一个http2

静态页面 其实就是复制官网的代码 其中证书 是我自己申请的可以用证书 dingshaohua.comimport fs from "fs"; import http2 from "node:http2";const server = http2.createSecureServer({key: fs.readFileSync("/etc/letsencrypt/live/dingshaohua.c…

Tmux使用介绍

Tmux使用介绍 Tmux是一个终端复用器(terminal multiplexer)。如果您有使用screen的经历的话,您可以理解为Tmux是screen的不同实现软件。本教程将讲解Tmux的基础用法。 会话与进程 命令行的典型用法是打开终端(terminal)后,在里面输入指令。用户的这种与计算机交互的手段,…

Lecture 04 Rendering on Game Engine

Lecture 04 Rendering on Game Engine Challenges on Game Rendering成千上万不同类型的物体 在现代计算机上跑(CPU、GPU的复杂结合) 稳定帧率帧率 分辨率限制CPU带宽和内存渲染只占20%左右,剩下留给Game logic、网络、动画、物理和AI系统等等Outline of RenderingBasics of…