.net excel循环插数据_Python实战: 如何将数据从一个Excel文件移动到另一个?
使用Python中的Pandas庫,我們可以從源Excel文件中獲取數(shù)據(jù)并將其插入到新的Excel文件中,然后命名并保存該文件。當(dāng)您需要深入到特定數(shù)據(jù)和/或重新格式化報(bào)表的數(shù)據(jù)時(shí),這很有用。 作為一個(gè)長期的VBA開發(fā)人員,發(fā)現(xiàn)Python的許多處理Excel文件和數(shù)據(jù)的庫和工具已經(jīng)相當(dāng)改變了我們的生活。下面是一個(gè)基于vbi的工程實(shí)例,它可以用一個(gè)實(shí)際的代碼替換下面的代碼。 在這篇文章中,我不會(huì)討論如何下載和安裝Python或Pandas庫。您可以很容易地在其他地方找到更好的文檔。本例使用python3。 |
Python實(shí)戰(zhàn): 如何將數(shù)據(jù)從一個(gè)Excel文件移動(dòng)到另一個(gè)?
www.arkai.net
用例
我們有一個(gè)Excel工作簿,包含了28家商店2019年的銷售報(bào)告。文件中有6個(gè)不同的工作表,所有工作表都與不同的產(chǎn)品ID相關(guān)。每個(gè)工作表都是同一個(gè)模板,其中包含28個(gè)存儲(chǔ)區(qū)中每個(gè)存儲(chǔ)區(qū)的行名稱和日歷年每個(gè)月的列標(biāo)題。
目標(biāo)是從源文件中的每個(gè)工作表中提取每個(gè)商店的銷售數(shù)據(jù),并將數(shù)據(jù)放入新Excel文件中的三列:產(chǎn)品ID、門店ID和銷售額(我們將指定一個(gè)月)。
步驟1-導(dǎo)入Pandas庫
我將打開Visual Studio代碼并創(chuàng)建一個(gè)新文件。我會(huì)把文件保存為'獲取銷售數(shù)據(jù).py'并在頂部鍵入'import pandas as pd'。
我在這個(gè)解決方案中使用的Pandas庫有幾個(gè)非常有用的特性。DataFrame對象用于數(shù)據(jù)操作,ExcelFile類用于將表格Excel表解析為DataFrame對象。Pandas提供了這些工具和其他工具,用于在內(nèi)存數(shù)據(jù)結(jié)構(gòu)和幾種不同格式(除了excel,如CSV、文本文件,甚至SQL數(shù)據(jù)庫)之間讀寫數(shù)據(jù)。
第2步-設(shè)置變量
下一步是創(chuàng)建三個(gè)變量?!半娮颖砀裎募弊兞吭O(shè)置為源文件工作簿?!皐orksheet_file”變量將是源文件中的工作表,并將“appended_data”作為空數(shù)組。
第3步-循環(huán)查看數(shù)據(jù)源Excel文件中的所有工作表
使用“for”循環(huán),我將從源數(shù)據(jù)文件中的每個(gè)工作表中獲取所需的數(shù)據(jù)。這種方法是完全可伸縮的,這意味著無論文件(同一模板)中有多少張工作表,也不管您添加、刪除或更改工作表名稱的頻率如何,此腳本都將始終檢查每個(gè)工作表。
我使用'sheet_name'作為工作簿中每個(gè)工作表的變量。在我保存對文件的更改后,我通過將變量“sheet_name”打印到終端來測試它。在集成終端中的VS代碼(在文件所在的目錄路徑獲取銷售數(shù)據(jù).py,我鍵入'pythongetSalesDate.py'保存更改并按Enter鍵后。請注意,每個(gè)標(biāo)簽名稱在我們的月刊店_銷售.xlsx文件打印到終端。
步驟3.1-設(shè)置month列以從中提取銷售數(shù)據(jù)
既然我已經(jīng)設(shè)置了循環(huán)遍歷工作簿中的每個(gè)工作表,我將獲得我想要的確切數(shù)據(jù)。這首先從每個(gè)工作表獲取所有數(shù)據(jù)并將其傳遞到數(shù)據(jù)幀。我將使用'df'作為數(shù)據(jù)幀的變量名。
此時(shí),我還將把一個(gè)month變量設(shè)置為要獲取數(shù)據(jù)的月份(表頭)。我會(huì)調(diào)出8月份的數(shù)據(jù)。
步驟3.2-從源Excel文件獲取初始數(shù)據(jù)幀
現(xiàn)在我將使用pandas.read_excel方法。我需要傳遞給方法的三個(gè)參數(shù)-源文件名、工作表名和列標(biāo)題行。我將使用值2作為標(biāo)題行,因?yàn)楣ぷ鞅碇械臉?biāo)題行是Excel第3行,Pandas識別的行值是從零開始的索引(這意味著Excel中的第1行將是header=0值)。
步驟3.3-將我的初始數(shù)據(jù)幀打印到終端進(jìn)行檢查
如果我想看看數(shù)據(jù)幀在其當(dāng)前狀態(tài)下是什么樣子的,我可以用“print(df)”將其打印到我的終端。我真的會(huì)打“print”(df.header(5) “)”以將結(jié)果限制為每張工作表的前5行。注意Pandas默認(rèn)情況下會(huì)在最左邊添加一個(gè)索引列。
注意,dataframe包含表中的每一列,而那些不在store sales表之外的單元格將“NaN”顯示為值。我將清理這些數(shù)據(jù),只提取我需要的特定數(shù)據(jù),并刪除所有不需要或不需要的無關(guān)數(shù)據(jù)。
步驟3.4-將數(shù)據(jù)幀限制為“Store ID”和“August”列
接下來我要做的是添加一行代碼,將數(shù)據(jù)幀中的數(shù)據(jù)限制為“Store ID”和“August”列。注意腳本下方集成終端中“print(df)”的結(jié)果。
步驟3.5-過濾數(shù)據(jù)幀的行,只查找'August'列中大于$3000的值
下一步是將行限制為僅銷售值大于3000美元的行。我可以用數(shù)據(jù)幀。何處方法來執(zhí)行此操作。
步驟3.6-從數(shù)據(jù)幀中刪除具有“NaN”值的行
注意,在候機(jī)樓,我們現(xiàn)在有一排“NaN”。我們可以用dataframe.dropna()功能。一旦我這樣做,保存文件,并再次運(yùn)行它,我可以看到一個(gè)更干凈的數(shù)據(jù)幀在終端。
步驟3.7-創(chuàng)建一個(gè)“產(chǎn)品標(biāo)識”列并將其添加到數(shù)據(jù)幀中
接下來的兩行代碼將基于源工作簿文件中的每個(gè)工作表選項(xiàng)卡名在數(shù)據(jù)幀中創(chuàng)建一個(gè)“產(chǎn)品標(biāo)識”列。然后,我將設(shè)置dataframes的最終列順序,將我的新“Product ID”列作為第一列。當(dāng)我再次運(yùn)行腳本時(shí),我看到數(shù)據(jù)幀的3列被打印到終端。
步驟3.8-將每個(gè)數(shù)據(jù)幀添加到數(shù)組
下一步是將每個(gè)dataframe作為元素添加到“appended_data”數(shù)組中。因?yàn)橥ㄟ^“for”循環(huán)的每次迭代都會(huì)創(chuàng)建一個(gè)新的數(shù)據(jù)幀,所以我可以使用append(df)方法將源工作簿中每個(gè)工作表中的每個(gè)連續(xù)數(shù)據(jù)幀追加到現(xiàn)有數(shù)組“appended_data”。
步驟4-將附加的_數(shù)據(jù)數(shù)組中的所有數(shù)據(jù)幀連接到單個(gè)數(shù)據(jù)幀中
既然'for'循環(huán)已經(jīng)將所有工作表中的數(shù)據(jù)拉到它們自己的數(shù)據(jù)幀中,這些數(shù)據(jù)幀已經(jīng)添加到“appended_data”數(shù)組中,我需要將它們合并到一個(gè)數(shù)據(jù)幀中。我會(huì)用pandas.concat()實(shí)現(xiàn)這一目標(biāo)的功能。
我將保存文件并再次運(yùn)行它,將“附加的數(shù)據(jù)”打印到終端。結(jié)果證實(shí),我現(xiàn)在有一個(gè)單獨(dú)的數(shù)據(jù)幀,每個(gè)'Product ID'部分沒有重復(fù)的標(biāo)題行。
步驟5-將數(shù)據(jù)幀導(dǎo)出到新的Excel文件
現(xiàn)在唯一要做的就是將現(xiàn)有的數(shù)據(jù)幀導(dǎo)出到一個(gè)新的Excel文件中。使用pandas.dataframe.to_ excel()函數(shù),我將文件路徑和文件名作為參數(shù)傳遞給函數(shù)。在第二個(gè)參數(shù)中,我輸入'index=False',這樣索引列就不會(huì)導(dǎo)出到新的電子表格文件中。
第6步-運(yùn)行完成的腳本并打開新文件
我將保存新的更改,運(yùn)行腳本,并檢查新創(chuàng)建文件的輸出文件路徑。
當(dāng)我打開文件時(shí),我將看到三列:“Product ID”、“Store ID”和“八月”,其中只有在“August”列中包含值大于3000的行。
在不到20行代碼中,您可以自動(dòng)化一個(gè)甚至不需要打開Excel應(yīng)用程序的過程,更不用說打開源數(shù)據(jù)文件了。此外,它還可以擴(kuò)展到源文件中有多少工作表,并且腳本運(yùn)行大約需要2-3秒。
您甚至可以使用Tkinter庫開發(fā)桌面UI,通過從用戶輸入中傳遞列選擇、文件路徑和名稱等參數(shù),使腳本更加動(dòng)態(tài)。但那是另一天的另一篇文章。
獲取GitHub上的完整腳本代碼:https://github.com/toddbrannon/get_excel_data/blob/master/getExcelData.py
往期推薦
全球人工智能戰(zhàn)略分析報(bào)告
2020年度最佳人工智能,機(jī)器學(xué)習(xí)工作站
巨頭觀察 I 蘋果與谷歌之間的10大重要區(qū)別...
點(diǎn)擊上方藍(lán)字關(guān)注我們!
總結(jié)
以上是生活随笔為你收集整理的.net excel循环插数据_Python实战: 如何将数据从一个Excel文件移动到另一个?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机3gb和4gb有什么区别(手机大全手
- 下一篇: 微软 Win11 测试个性化新功能,让