Pandas資料處理基礎(1)
阿新 • • 發佈:2020-08-16
# To add a new cell, type '# %%' # To add a new markdown cell, type '# %% [markdown]' # %% import os import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns print('import finished.') file_path = 'd:\\stock.xlsx' #讀取CSV #file_path = pd.read_csv(fifa_path, index_col='Date', parse_dates=True) #讀取EXCEL datafr = pd.read_excel(file_path) datafr # %% #行索引 datafr.index # %% #列索引 datafr.columns # %% #空值列 datafr.info() # %% #顯示空值 datafr.isnull() # %% #空值填充 datafr.fillna(0) datafr.fillna({'PARTN':0}) # %% #表中數值分佈 datafr.describe() # %% datafr['PRICE'].dtype # %% #資料指定列去重,並保留first/last行 datafr.drop_duplicates(subset=['PROD'], keep='last').head() # %% #索引列轉為資料列 datafr.reset_index() # %% #指定列作為索引 datafr.reset_index().set_index('DATE') # %% #刪除原有索引,並生成新索引 datafr.reset_index(drop=True) # %% #裝入指定列 datafr[['PROD','QTY']] # %% #查詢行列索引對應的資料 datafr.iloc[[0,3,5],[0,2,3,4]] # %% #查詢第一行第一列的資料 datafr.iloc[1,1] # %% #行索引查詢資料 datafr.loc[12] # %% #統計出現次數並降序顯示 datafr['PROD'].value_counts(normalize=True,sort=True) # %% #取唯一值 datafr['PROD'].unique() # %% datafr['PROD'].isin([10,22]) # %% #樹型顯示 datafr.stack() # %% #寬錶轉長表 datafr.set_index(['STOCK','PROD']).stack().reset_index() # %% #求方差 datafr.var(axis=1) # %% #所有資料執行函式 datafr[['QTY','TOTAL']].apply(lambda x:x*100) # %% #分組統計/求和,並重置索引 datafr.groupby('PROD').aggregate(['count','sum']).reset_index().head() # %% #資料透視表 pd.pivot_table(data=datafr,values=['QTY','TOTAL'],index='PROD',columns='PARTN',aggfunc={'QTY':'sum','TOTAL':'sum'},fill_value=0,margins=True,margins_name='SUM').to_excel(excel_writer='d:\\stock_pivot.xlsx') # %% plt.rcParams['font.family'] = ['simhei'] plt.rcParams['figure.autolayout'] = True fig, axes = plt.subplots(1, 2) ax1 = axes[0] ax2 = axes[1] pt = pd.pivot_table(data=datafr,values=['QTY','TOTAL'],index=['PROD'],aggfunc={'QTY':'sum','TOTAL':'sum'},fill_value=0) ax1.bar(x=pt.index, height=pt.QTY, edgecolor='k') ax2.bar(x=pt.index, height=pt.TOTAL) ax1.set_title('QTY') ax2.set_title('TOTAL') for tick in ax1.get_xticklabels(): tick.set_rotation(40) for tick in ax2.get_xticklabels(): tick.set_rotation(40) plt.tick_params(bottom=False, left=False) plt.show() # %% plt.figure(figsize=(14,6)) plt.title("SALES FOR YEARS") pt2 = pd.pivot_table(data=datafr,values=['QTY','TOTAL','PRICE'],index=['DATE'],aggfunc={'QTY':np.sum,'TOTAL':np.sum,'PRICE':np.average},fill_value=0) sns.lineplot(data=pt2)