Pandas庫專為資料分析而設計,它是使Python成為強大而高效的資料分析環境的重要因素,
一、Pandas資料結構
1、import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
2、S1=pd.Series([‘a’,’b’,’c’]) series是一組資料與一組索引(行索引)組成的資料結構
3、S1=pd.Series([‘a’,’b’,’c’],index=(1,3,4)) 指定索引
4、S1=pd.Series({1:‘a’,2:’b’,3:’c’}) 用字典形式指定索引
5、S1.index() 回傳索引
6、S1.values() 回傳值
7、Df=pd.DataFrame([‘a’,’b’,’c’]) dataframe是一組資料與兩組索引(行列索引)組成的資料結構
8、Df=pd.DataFrame([[a,A],[b,B],[c,C]],columns=[‘小寫’,’大寫’],index=[‘一’,’二’,’三’])
Columms 為列索引,index為行索引
9、pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider 清華鏡像
10、data=https://www.cnblogs.com/lmq886/p/{‘小寫’:[‘a’,’b’,’c’],’大寫’:[‘A’,’B’,’C’]} 傳入字典
Df=Pd.DataFrame(data)
11、Df.index() df.columns()
二、讀取資料
12、df=pd.read_excel(r’C:\user\...xlsx’,sheet_name=’sheet1’) 或
Pd.read_excel(r’C:\user\...xlsx’,sheet_name=0) 讀取excel表
13、Pd.read_excel(r’C:\user\...xlsx’,index_col=0,header=0)
index_col指定行索引,header指定列索引
14、pd.read_excel(r’C:\user\...xlsx’,usecols=[0,1]) 匯入指定列,不能有index_col和header
15、pd.read_tablel(r’C:\user\...txt’,sep=’ ’) 匯入txt檔案,sep指定分隔符是什么
16、df.head(2) 展示前兩行,默認展示前5行
17、df.shape 顯示資料幾行幾列,不包含行和列索引
18、http://df.info() 可查看表中資料的型別
19、df.describe() 可獲得表中數值型別指端的分布值(和、平均值、方差等)
三、資料預處理
20、df.info() 可顯示表中哪個資料為空
21、df.isnull() 方法可以判斷哪個值是缺失值,如果缺失回傳True,否則為False
22、df.dropna() 默認洗掉含缺失值的行
23、df.dropna(how=’all’) 洗掉全為空值的行,不全為空值的行不會洗掉
24、df.fillna(0) 用0填充所有空值
25、df.fillna({‘性別’:’男’,’年齡’:’30’}) 對性別列中空值填充男,年齡填充30
26、df.drop_duplicates() 默認對所有值進行重復值檢查,保留第一行的值
27、df.drop_duplicates(subset=’性別’) 對性別列中重復值查詢保留第一行
28、df.drop_duplicates(subset=[’性別’,’公司’],keep=’last’) 對性別和公司兩列查重
keep設定默認為first(保留第一個),可設定為last(保留最后一個) 或False(不部不保留)
29、df[‘ID’].dtype 查看ID列的資料型別
30、df[‘ID’].astype(‘float’) 將ID列的資料型別轉換為float型別
31、資料型別:int、float、object、string、unicode、datetime
32、df[‘ID’][1] ID列的第二個資料
33、df.columns=[‘大寫’,’小寫’,’中文’] 為無索引表添加列索引
34、df.index=[1,2,3] 添加行索引
35、df.set_index(‘編號’) 指明要用的列作為行索列
36、df.rename(index={‘訂單編號’:’新訂單編號’,’客戶姓名’:’新客戶姓名’}) 對行索引進行重新命名
37、df.rename(columns={1:’一’,2:’二’}) 對列索引進行重新命名
38、df.reset_index() 默認將全部index轉化為column
39、df.reset_index(level=0) 將0級索引轉化為column
40、df.reset_index(drop=True) 洗掉原有索引
四、資料選擇
41、df[[‘ID’,’姓名’]] 多個列名要裝入list
42、df.iloc[[1,3],[2,4]] 用行列編號選擇資料
43、df.iloc[1,1] 選取表中的第3行2列資料,第一行默認為列索引
44、df.iloc[:,0:4] #獲取第1列到第4列的值
45、df.loc[‘一’] #loc用行名選取的行資料,格式是Series,但可以用串列形式訪問
46、df.loc[‘一’][0] 或 df.loc[‘一’][‘序號’]
47、df.iloc[1]#iloc用行編號選取行資料
48、df.iloc[[1,3]]#多行編號選取行資料,要用list封裝,不然變成行列選取
49、df.iloc[1:3]#選擇第二行和第四行
50、df[df[‘年齡’]<45] #加判斷條件回傳符合條件的全部資料,不局限年齡列
51、df[(df[‘年齡’]<45)&(df[‘ID’]<4)] #判斷多條件選擇資料
52、df.iloc[[1,3],[2,4]] 相當于df.loc[[‘一’,’二’],[‘年齡’,’ID’]] #loc是名,iloc是編號
53、df[df[‘年齡’]<45][[‘年齡’,’ID’]]#先通過年齡條件選擇行,再通過不同索引指定列
54、df.iloc[1:3,2:4]#切片索引
五、數值操作
55、df[‘年齡’].replace(100,33)#對年齡列中的100替換成33
56、df.replace(np.NaN,0)#相當于fillna(),其中np.NaN是python中預設值的表示方式
57、df.replace([A,B],C)#多對一替換,A、B替換成C
58、df.replace({‘A’:’a’,‘B’:’b’,‘C’:’c’})#多對多替換
59、df.sort_values(by=['申請單編號'],ascending=False)#申請單編號列降序排列,Ture升序排列(默認)
60、df.sort_values(by=['申請單編號'],na_position=’first’)#申請單編號列升序排列,缺失值排在第一位
默認缺失值在最后一位last
61、df.sort_values(by=['col1',’col2’],ascending=[False,True])#多列排序
62、df[‘銷量’].rank(method=’first’)#銷量排名(不是排序),method有first\min\max\average
63、df.drop([‘銷量’,’ID’],axis=1)#洗掉列,直接是列名
64、df.drop(df.columns[[4,5]],axis=1)#洗掉列,是編號
65、df.drop(colums=[‘銷量’,’ID’])#此種方式洗掉列,可以不寫axis=1
66、df.drop([‘a’,’b’],axis=0)#洗掉行,直接是列名
67、df.drop(df.index[[4,5]],axis=0)#洗掉行,是編號
68、df.drop(index=[‘a’,’b’])#此種方式洗掉行,可以不寫axis=0
69、df[‘ID’].value_counts()#對ID列中資料出現的次數進行統計
70、df[‘ID’].value_counts(normalize=Ture,sort=False)#對ID列中資料出現的次數占比進行統計,并降序排序
71、df[‘ID’].unique()#獲取列的唯一值
72、df[‘年齡’].isin([‘a’,11])#查看這列中是否包含a或11
73、pd.cut(df[‘ID’],bins=[0,3,6,10])#用bins指明切磁區間
74、pd.qcut(df[‘ID’],3)#ID列切分成3個部分,每部分資料個數盡量一致
75、df.insert(2,’商品’,[‘書’,’筆’,’計算器’])#插入第三列
76、df[’商品’]=[‘書’,’筆’,’計算器’])#插新列,在表的最后面
77、df.T行列互換
78、df.tack()#把表格型資料轉化成樹形資料
79、df.set_index([‘ID’,’姓名’]).stack().reset_index()#寬表轉換成長表,先將共同列設定成行索引,再對其他列
進行轉化成樹形資料,再重置行索引
80、df.melt(id_vars=[‘ID’,’姓名’],var_name=’year’,value_name=’sale’)#id_var引數指明寬表轉換成長表時保持不
變的列,var_name引數表示原來的列索引轉化為行索引對應的列名,value_name表示新索引對應值的列名
81、df[‘C1’].apply(lambda x:x+1)#相當于map(),只是需要和lambda配合
82、df.applymap(lambda x:x+1),對表中的所有資料執行相同函式運算
六、資料運算
83、df[‘ID’]+Df[‘ID’]#可進行加減乘除
84、df[‘ID’]>Df[‘ID’]#可進行> < == !=等比較運算
85、df.count()#統計每列的非空值的個數
86、df.count(axis=1)#統計每行的非空值的個數
87、df[‘ID’].count()#統計指定列的非空值的個數
88、df.sum(axis=1)#每列/行求和結果
89、df.mean(axis=1)#每列/行求均值
90、df.max(axis=1)#每列/行求最大值
91、df.min(axis=1)#每列/行求最小值
92、df.median(axis=1)#每列/行求中間值
93、df.mode(axis=1)#每列/行中出現最多的值
94、df.var(axis=1)#每列/行求方差
95、df.std(axis=1)#每列/行求標準差
96、df.quantile(0.25)#求1/4分位數,可以0.5、0.75等分位數
97、df.corr()#求整個DataFrame表中的相關性
七、時間序列
98、from datetime import datetime
99、datatime.now()#回傳現在的時間年月日時分秒
100、datatime.now().year#回傳年,可以.month\.day
101、datatime.now().weekday()-1#回傳周幾
102、datatime.now().isocalendar()#回傳周數
103、 (2018,41,7)#2018年的第41周第7天
104、datatime.now().date()#只回傳年月日
105、datatime.now().time()#只回傳時間
106、datatime.now().strftime(‘%Y-%m-%d %H:%M:%S’)#回傳2020-03-13 09:09:12
107、from dateutil.parer import parse
108、 parse(str_time)#將字串的時間轉化成為時間格式
109、pd.Datetimeindex([‘2020-02-03’,2020-03-05’])#設定時間索引
110、data[‘2018’]#獲取2018年的資料
111、data[‘2018-01’]#獲取2018年1月的資料
112、data[‘2018-01-05’:‘2018-01-15’]#獲取這個時段的資料
113、非時間索引的表格處理
114、df[df[‘成交時間’]==datetime(2018,08,05)]
115、df[df[‘成交時間’]>datetime(2018,08,05)]
116、df[(df[‘成交時間’]>datetime(2018,08,05))&(df[‘成交時間’] <datetime(2018,08,15))]
117、cha=datatime(2018,5,21,19,50)-datatime(2018,5,18,17,50)
118、 cha.days#回傳天的時間差
119、 cha.seconds#回傳秒的時間差
120、 cha.seconds/3600#回傳小時的時間差
121、datatime(2018,5,21,19,50)+timedelta(days=1)#往后移一天
122、datatime(2018,5,21,19,50)+timedelta(seconds=20)#往后移20秒
123、datatime(2018,5,21,19,50)-timedelta(days=1)#往前移一天
八、資料透視表
124、df.groupby(‘客戶分類’).count()#客戶分類后求數運算
125、df.groupby(‘客戶分類’).sum()#客戶分類后求和運算
126、df.groupby(‘客戶分類’,’區域分類’).sum()#多列分類后求和運算
127、df.groupby(‘客戶分類’,’區域分類’)[‘ID’].sum()#多列分類后ID求和運算
128、df[‘ID’]#DataFrame取出一列就是Series型別
129、df.groupby(df[‘ID’]).sum() 相當于 df.groupby(‘ID’).sum()
130、df.groupby(‘客戶分類’).aggregate([‘sum’,’count’]# aggregate可實作多種匯總方式
131、df.groupby(‘客戶分類’).aggregate({‘ID’:‘count’,’銷量’: ‘sum’})
132、# aggregate可針對不同列做不同的匯總運算
133、df.groupby(‘客戶分類’).sum().reset_index()#分組匯總后再重置索引,變為標準DataFrame
134、pd.pivot_table(data,values,index,columms,aggfunc,fill_value,margins,dropna,margins_name)
135、資料透視表,data:資料表df,values:值,index:行索引,columns:列索引,aggfunc:values的計算型別,fill_value:對空值的填充方式;margins:是否有合計列;margins_name:合計列的列名
136、pd.pivot_table(df,values=[’ID’,‘銷量’],index=’客戶分類’,columms=‘區域’,aggfunc={‘ID’:‘count’,’銷量’:‘sum’}),fill_value=https://www.cnblogs.com/lmq886/p/0,margins=Ture,dropna=None,margins_name=’總計’)
九、多表格拼接
137、pd.merge(df1,df2)#默認自動尋找兩個表中的公共列進行拼接
138、pd.merge(df1,df2,on=“學號“)#on來指定連接列,連接列要是公共列
139、pd.merge(df1,df2,on=[‘學號’,’姓名’]#on來指定連接列,連接列要是公共列
140、pd.merge(df1,df2,left_on=‘學號’right_on=’編號’) #由公共列,但類名不同時用左右鍵指定
141、pd.merge(df1,df2,left_index=‘學號’right_index=’編號’)#兩表公共列都是索引列時
142、pd.merge(df1,df2,left_index=‘學號’right_on=’編號’)#公共列一個時索引列一個時普通列
143、pd.merge(df1,df2,on=’學號’,how=’inner’)#回傳公共列中對應的公共值拼接(內連接)
144、pd.merge(df1,df2,on=’學號’,how=’left’)#回傳公共列中對應的左表值(左連接)
145、pd.merge(df1,df2,on=’學號’,how=’right’)#回傳公共列中對應的右表值(右連接)
146、pd.merge(df1,df2,on=’學號’,how=’outer’)#回傳公共列中對應的所有值(外連接)
147、pd.concat([df1,df2])#兩個結構相同的表縱向連接,保留原索引值
148、pd.concat([df1,df2],ignore_index=True)#兩個結構相同的表縱向連接,重新設定索引值
149、pd.concat([df1,df2],ignore_index=True).drop_duplicates()#拼接后去掉重復值
十、匯出檔案
150、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測驗.xlsx’)#匯出檔案格式.xlsx用to_excel方法,通過excel_writer引數來實作
151、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測驗.xlsx’,sheet_name=’檔案’)
152、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測驗.xlsx’,sheet_name=’檔案’,index=False)#匯出是去掉索引
153、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測驗.xlsx’,sheet_name=’檔案’,index=False,columns=[‘ID’,’銷量’,‘姓名’])#設定匯出的列
154、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測驗.xlsx’,sheet_name=’檔案’,index=False,columns=[‘ID’,’銷量’,‘姓名’],encoding=’utf-8’)#設定匯出的列
155、df.to_excel(excel_writer=r’C:\users\zhoulifu\Desktop\測驗.xlsx’,sheet_name=’檔案’,index=False,columns=[‘ID’,’銷量’,‘姓名’],encoding=’utf-8’,na_rep=0)#缺失值填充
156、writer=pd.ExcelWriter(excelpath,engine=’xlsxwirter’)#匯出多個檔案至一個檔案的多個sheet
157、df1.to_excel(writer,sheet_name=‘表一’)
158、df2.to_excel(writer,sheet_name=’表二’)
159、writer.save()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/547346.html
標籤:Python
