首页 > 编程语言 >Python复制表格文件的指定行:不同的行复制不同次数

Python复制表格文件的指定行:不同的行复制不同次数

时间:2023-11-18 13:32:32浏览次数:58  
标签:num 表格 Python dif df 直方图 复制 duplicated

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

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

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

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

# -*- 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 plt

original_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 = 2

num = [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列的直方图。

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

  至此,大功告成。

标签:num,表格,Python,dif,df,直方图,复制,duplicated
From: https://blog.51cto.com/fkxxgis/8461413

相关文章

  • python 根据绝对路径关闭进程
    importosimportpsutil#如果未知路径且写入了配置环境#os.system("taskkill/f/imexcel.exe&taskkill/f/imwps.exe")#cmdtaskkill直接输入不需加双引号#cmdtaskkill无法根据绝对路径关闭程序无论有没有双引号(无效查询或没有找到进程)#True,False,N......
  • 根据绝对路径 python 后台打开程序
    importsubprocess#不适用于关闭程序/进程#subprocess.run#等候运行结束#returncode=0,stdout='',stderr=''#后台运行,避免阻塞#避免shell注入gongji#os.system需要双引号(以避免空格),subprocess不需要#cmd直接输入路径如果存在空格需要双引号#retur......
  • Python如何使用Networkx实现复杂的人物关系图?
    (Python如何使用Networkx实现复杂的人物关系图?)1简单引入日常工作、生活中我们经常会遇到一些复杂的事务关系,比如人物关系,那如何才能清楚直观的看清楚这些任务关系呢?比如我们从网上搜索1个人物关系图,大家看看:声明:以下图片来源于网络,如果涉及版权问题,请联系作者删除。本文仅......
  • Conda管理Python版本
    查看Python版本查看当前环境的Python版本condaactivate&&python-V查看指定环境condaactivatetest&&python-V创建Python环境先搜索conda有哪些python版本condasearch--full--namepython根据搜索出来的版本安装condacreate--nametestpython=3.9.7或......
  • 【小沐学Python】Web服务器搭建(Nginx、IIS)
    1、Web服务器web服务器一词可以代指硬件或软件,或者是它们协同工作的整体。6、NginxNginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器,同时也是一个IMAP、POP3、SMTP代理服务器,多用于高连接并发。6.1简介https://nginx.org/en/Nginx是lgorSysoev为俄罗斯......
  • 往nas复制多个文件会卡住是什么原因
    往NAS复制多个文件时出现卡住的现象,可能有以下几种原因:1.网络问题:网络不稳定或者网速过慢,会导致文件传输不畅,出现卡住的情况。此时,可以检查网络是否正常,尝试重启路由器或者更换网络设备。2.硬件问题:NAS硬件配置不足,例如内存不足、硬盘故障等,会导致文件传输速度变慢,从而出现卡住的......
  • Python | Opencv的人脸检测和人类识别
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • python 赋值、浅拷贝、深拷贝的区别
    b=a: 赋值引用,a和b都指向同一个对象。b=a.copy(): 浅拷贝,a和b是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。b=copy.deepcopy(a): 深度拷贝,a和b完全拷贝了父对象及其子对象,两者是完全独立的。对于可变的序列,切片操作符:是浅拷贝 比如:a=b[:]......
  • python:第十六章:赋值运算符
    一,什么是赋值运算符?赋值运算符的执行顺序赋值运算符=它用来把值赋给变量。运算符右边的表达式先计算得到结果,再将结果赋值给左边的变量12345#赋值x=5y=x+3print("x=",x)print("y=",y)运行结果:x=5y=8二,链式赋值就是同时给......
  • python:第十七章:布尔运算符(逻辑运算符)
    一,布尔运算符有哪些?and运算是与运算,只有两个值都为True,and运算结果才是True,如下表abaandbTrueTrueTrueTrueFalseFalseFalseTrueFalseFalseFalseFalseor运算是或运算,只要其中有一个值为True,or运算结果就是TrueabaorbTrueTrueT......