Python對Excel不同的行分別復(fù)制不同的次數(shù)
本文介紹基于Python語言,讀取Excel表格文件數(shù)據(jù),并將其中符合我們特定要求的那一行加以復(fù)制指定的次數(shù),而不符合要求的那一行則不復(fù)制;并將所得結(jié)果保存為新的Excel表格文件的方法。
這里需要說明,在我們之前的文章Python讀取Excel文件并復(fù)制指定的數(shù)據(jù)行中,也介紹過實現(xiàn)類似需求的另一種Python代碼,大家如果有需要可以查看上述文章;而上述文章中的代碼,由于用到了DataFrame.append()
這一個在最新版本pandas
庫中取消的方法,因此有的時候可能會出現(xiàn)報錯的情況;且本文中的需求較之上述文章有進一步的提升,因此大家主要參考本文即可。
首先,我們來明確一下本文的具體需求。現(xiàn)有一個Excel表格文件,在本文中我們就以.csv
格式的文件為例;其中,如下圖所示,這一文件中有一列(也就是inf_dif
這一列)數(shù)據(jù)比較關(guān)鍵,我們希望對這一列數(shù)據(jù)加以處理——對于每一行,如果這一行的這一列數(shù)據(jù)的值在指定的范圍內(nèi),那么就將這一行復(fù)制指定的次數(shù)(復(fù)制的意思相當(dāng)于就是,新生成一個和當(dāng)前行一摸一樣數(shù)據(jù)的新行);而對于符合我們要求的行,其具體要復(fù)制的次數(shù)也不是固定的,也要根據(jù)這一行的這一列數(shù)據(jù)的值來判斷——比如如果這個數(shù)據(jù)在某一個值域內(nèi),那么這一行就復(fù)制10
次;而如果在另一個值域內(nèi),這一行就復(fù)制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)
其中,上述代碼的具體含義如下。
首先,我們需要導(dǎo)入所需的庫,包括numpy
、pandas
和matplotlib.pyplot
等,用于后續(xù)的數(shù)據(jù)處理和繪圖操作。接下來,即可開始讀取原始數(shù)據(jù),我們使用pd.read_csv()
函數(shù)讀取文件,并將其存儲在一個DataFrame對象df
中;這里的原始文件路徑由original_file_path
變量指定。
隨后,我們開始設(shè)置重復(fù)次數(shù)。在這里,我們根據(jù)特定的條件,為每個值設(shè)定重復(fù)的次數(shù)。根據(jù)inf_dif
列的值,將相應(yīng)的重復(fù)次數(shù)存儲在num
列表中。根據(jù)不同的條件,使用條件表達式(if-else語句)分別設(shè)定了不同的重復(fù)次數(shù)。
接下來,我們使用loc
函數(shù)和np.repeat()
函數(shù),將數(shù)據(jù)按照重復(fù)次數(shù)復(fù)制,并將結(jié)果存儲在duplicated_df
中。
最后,為了對比我們數(shù)據(jù)重復(fù)的效果,可以繪制直方圖。在這里,我們使用matplotlib.pyplot
庫中的hist()
函數(shù)繪制了兩個直方圖;其中,第一個直方圖是原始數(shù)據(jù)集df
中inf_dif
列的直方圖,第二個直方圖是復(fù)制后的數(shù)據(jù)集duplicated_df
中inf_dif
列的直方圖。通過指定bins
參數(shù),將數(shù)據(jù)分成50
個區(qū)間。
完成上述操作后,我們即可保存數(shù)據(jù)。將復(fù)制后的數(shù)據(jù)集duplicated_df
保存為.csv
格式文件,路徑由result_file_path
變量指定。
執(zhí)行上述代碼,我們將獲得如下所示的兩個直方圖;其中,第一個直方圖是原始數(shù)據(jù)集df
中inf_dif
列的直方圖,也就是還未進行數(shù)據(jù)復(fù)制的直方圖。
其次,第二個直方圖是復(fù)制后的數(shù)據(jù)集duplicated_df
中inf_dif
列的直方圖。
可以看到,經(jīng)過前述代碼的處理,我們原始的數(shù)據(jù)分布情況已經(jīng)有了很明顯的改變。
到此這篇關(guān)于Python對Excel不同的行分別復(fù)制不同的次數(shù)的文章就介紹到這了,更多相關(guān)Python Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python保存dict字典類型數(shù)據(jù)到Mysql并自動創(chuàng)建表與列
這篇文章主要介紹了Python保存dict字典類型數(shù)據(jù)到Mysql并自動創(chuàng)建表與列,字典是另一種可變?nèi)萜髂P?,且可存儲任意類型對象,想了解更多?nèi)容的小伙伴可以和小編一起進入下面文章學(xué)習(xí)更多內(nèi)容,希望對你有所幫助2022-02-02Python基礎(chǔ)教程之內(nèi)置函數(shù)locals()和globals()用法分析
這篇文章主要介紹了Python基礎(chǔ)教程之內(nèi)置函數(shù)locals()和globals()用法,結(jié)合實例形式分析了locals()和globals()函數(shù)的功能、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下2018-03-03基于django channel實現(xiàn)websocket的聊天室的方法示例
這篇文章主要介紹了基于基于django channel實現(xiàn)websocket的聊天室的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04圖解Python中淺拷貝copy()和深拷貝deepcopy()的區(qū)別
這篇文章主要介紹了Python中淺拷貝copy()和深拷貝deepcopy()的區(qū)別,淺拷貝和深拷貝想必大家在學(xué)習(xí)中遇到很多次,這也是面試中常常被問到的問題,本文就帶你詳細了解一下2023-05-05Python操作MySQL數(shù)據(jù)庫的兩種方式實例分析【pymysql和pandas】
這篇文章主要介紹了Python操作MySQL數(shù)據(jù)庫的兩種方式,結(jié)合實例形式分析了Python使用pymysql和pandas模塊進行mysql數(shù)據(jù)庫的連接、增刪改查等操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-03-03