pandas_數據拆分與合並


import pandas as pd import numpy as np # 讀取全部數據,使用默認索引 data = pd.read_excel(r'C:\Users\lenovo\Desktop\總結\Python\超市營業額.xlsx') # 修改異常值 data.loc[data.交易額 > 3000,'交易額'] = 3000 data.loc[data.交易額 < 200,'交易額'] = 200 # 刪除重復值 data.drop_duplicates(inplace = True) # inplace 表示對源數據也進行修改 # 填充缺失值 data['交易額'].fillna(data['交易額'].mean(),inplace = True) # 使用交叉表得到每人在各櫃台交易額的平均值 data_group = pd.crosstab(data.姓名,data.櫃台,data.交易額,aggfunc = 'mean').apply(round) # 繪制柱狀圖 data_group.plot(kind = 'bar') # <matplotlib.axes._subplots.AxesSubplot object at 0x000001D681607888> # 數據的合並 data1 = pd.read_excel(r'C:\Users\lenovo\Desktop\總結\Python\超市營業額.xlsx') data2 = pd.read_excel(r'C:\Users\lenovo\Desktop\總結\Python\超市營業額.xlsx',sheet_name = 'Sheet2') df1 = data1[:3] ''' 工號 姓名 日期 時段 交易額 櫃台 0 1001 張三 20190301 9:00-14:00 2000 化妝品 1 1002 李四 20190301 14:00-21:00 1800 化妝品 2 1003 王五 20190301 9:00-14:00 800 食品 ''' df2 = data2[:4] ''' 工號 姓名 日期 時段 交易額 櫃台 0 1006 錢八 20190301 9:00-14:00 850 蔬菜水果 1 1001 張三 20190302 14:00-21:00 600 蔬菜水果 2 1001 張三 20190302 9:00-14:00 1300 化妝品 3 1002 李四 20190302 14:00-21:00 1500 化妝品 ''' # 使用 concat 連接兩個相同結構的 DataFrame 對象 df3 = pd.concat([df1,df2]) ''' 工號 姓名 日期 時段 交易額 櫃台 0 1001 張三 20190301 9:00-14:00 2000 化妝品 1 1002 李四 20190301 14:00-21:00 1800 化妝品 2 1003 王五 20190301 9:00-14:00 800 食品 0 1006 錢八 20190301 9:00-14:00 850 蔬菜水果 1 1001 張三 20190302 14:00-21:00 600 蔬菜水果 2 1001 張三 20190302 9:00-14:00 1300 化妝品 3 1002 李四 20190302 14:00-21:00 1500 化妝品 ''' # 合並,忽略原來的索引 ignore_index df4 = df3.append([df1,df2],ignore_index = True) ''' 工號 姓名 日期 時段 交易額 櫃台 0 1001 張三 20190301 9:00-14:00 2000 化妝品 1 1002 李四 20190301 14:00-21:00 1800 化妝品 2 1003 王五 20190301 9:00-14:00 800 食品 3 1006 錢八 20190301 9:00-14:00 850 蔬菜水果 4 1001 張三 20190302 14:00-21:00 600 蔬菜水果 5 1001 張三 20190302 9:00-14:00 1300 化妝品 6 1002 李四 20190302 14:00-21:00 1500 化妝品 7 1001 張三 20190301 9:00-14:00 2000 化妝品 8 1002 李四 20190301 14:00-21:00 1800 化妝品 9 1003 王五 20190301 9:00-14:00 800 食品 10 1006 錢八 20190301 9:00-14:00 850 蔬菜水果 11 1001 張三 20190302 14:00-21:00 600 蔬菜水果 12 1001 張三 20190302 9:00-14:00 1300 化妝品 13 1002 李四 20190302 14:00-21:00 1500 化妝品 ''' # 按照列進行拆分 df5 = df4.loc[:,['姓名','櫃台','交易額']] # 查看前五條數據 df5[:5] ''' 姓名 櫃台 交易額 0 張三 化妝品 2000 1 李四 化妝品 1800 2 王五 食品 800 3 錢八 蔬菜水果 850 4 張三 蔬菜水果 600 ''' # 合並 merge 、 join # 按照工號進行合並,隨機查看 3 條數據 rows = np.random.randint(0,len(df5),3) pd.merge(df4,df5).iloc[rows,:] ''' 工號 姓名 日期 時段 交易額 櫃台 7 1002 李四 20190301 14:00-21:00 1800 化妝品 4 1002 李四 20190301 14:00-21:00 1800 化妝品 10 1003 王五 20190301 9:00-14:00 800 食品 ''' # 按照工號進行合並,指定其他同名列的后綴 pd.merge(df1,df2,on = '工號',suffixes = ['_x','_y']).iloc[:,:] ''' 工號 姓名_x 日期_x 時段_x ... 日期_y 時段_y 交易額_y 櫃台_y 0 1001 張三 20190301 9:00-14:00 ... 20190302 14:00-21:00 600 蔬菜水果 1 1001 張三 20190301 9:00-14:00 ... 20190302 9:00-14:00 1300 化妝品 2 1002 李四 20190301 14:00-21:00 ... 20190302 14:00-21:00 1500 化妝品 ''' # 兩個表都設置工號為索引 set_index df2.set_index('工號').join(df3.set_index('工號'),lsuffix = '_x',rsuffix = '_y').iloc[:] ''' 姓名_x 日期_x 時段_x 交易額_x ... 日期_y 時段_y 交易額_y 櫃台_y 工號 ... 1001 張三 20190302 14:00-21:00 600 ... 20190301 9:00-14:00 2000 化妝品 1001 張三 20190302 14:00-21:00 600 ... 20190302 14:00-21:00 600 蔬菜水果 1001 張三 20190302 14:00-21:00 600 ... 20190302 9:00-14:00 1300 化妝品 1001 張三 20190302 9:00-14:00 1300 ... 20190301 9:00-14:00 2000 化妝品 1001 張三 20190302 9:00-14:00 1300 ... 20190302 14:00-21:00 600 蔬菜水果 1001 張三 20190302 9:00-14:00 1300 ... 20190302 9:00-14:00 1300 化妝品 1002 李四 20190302 14:00-21:00 1500 ... 20190301 14:00-21:00 1800 化妝品 1002 李四 20190302 14:00-21:00 1500 ... 20190302 14:00-21:00 1500 化妝品 1006 錢八 20190301 9:00-14:00 850 ... 20190301 9:00-14:00 850 蔬菜水果 '''

2020-05-07


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM