Pandas 處理excel 數據的流程,非常簡單直觀:
讀取數據,存入內存(以dataframe形式,含行和列的二維數據結構),使用pandas內置方法處理數據,最後把結果導出至excel。
第一步,使用pandas 的read_excel 方法讀取excel文件,natural language,多麼直接!
import pandas as pddf = pd.read_excel('超市運營數據.xlsx')#查看數據前5行df.head()第二步,使用df.info()方法查看數據概況,了解總行數、各列名、數值類型,佔用內存等信息。
從結果中看到,總數據量3478,沒有空值,數據類型有:數值(int 和float)和時間(datime64)以及字符串(object),內存為200+KB,接下來我們對數據用pandas來進行處理,開整!
1. 首先看下數據篩選和對比:(注意運行時間,毫秒級)
df[(df.日期 > '2020-04-30 00:00:00') & (df.日期 < '2020-06-01 00:00:00')]2: 然後看下如何批量拆分和合併:(同樣,注意運行時間,個位數秒)
i. 將所有數據按照年份拆分到同一個工作簿的不同的工作表sheet裡:
df['Year'] = df['日期'].dt.year.astype('str')years = list(df['Year'].unique())writer = pd.ExcelWriter('data_by_year.xlsx')for year in years: df[df['Year']== year].to_excel(writer,sheet_name = year,index = False)writer.save()ii. 將所有數據按照年份拆分到互相獨立的工作簿裡:
import osif not os.path.exists('年份/'): os.makedirs('年份/')for year in years: file_name = '年份/'+ year + '.xlsx' df[df['Year']== year].to_excel(file_name,index = False)iii. 將多張工作簿數據合併到一張工作簿裡(第2 步的反向操作):#這一步是遍歷文件夾裡所有excel,把數據匯總至一張表裡#首先創建空列表,用於存放所有數據lis_a = []
#遍歷所有excel文件,提取每個表裡的數據,追加到列表裡for foldName,subfolders,filenames in os.walk('年份'): for filename in filenames: #將文件夾名字和文件名合併,方便pandas 按照路徑讀取數據 file_name = os.path.join(foldName,filename) df_sub = pd.read_excel(file_name) lis_a.append(df_sub) #然後使用concat合併,最後導出df_all = pd.concat(lis_a)df_all.to_excel('data_all.xlsx',index = False)
使用pandas 處理excel數據,優勢在於:
1. 高效處理大數據量,速度在秒級,遠遠快於手動操作
2. 可以利用循環,批量、快速實現分析和導出結果
3. pands的好,誰用誰知道!