Python數據分析--Pandas知識點(二)
本文主要是總結學習pandas過程中用到的函數和方法, 在此記錄, 防止遺忘.
Python數據分析--Pandas知識點(一)
下面將是在知識點一的基礎上繼續總結.
13. 簡單計算
新建一個數據表df
1 import pandas as pd 2 3 df = pd.DataFrame({"地區": ["A區","B區", "C區"], 4 "前半年銷量": [3500, 4500,3800], 5 "後半年銷量": [3000, 6000,5000], 6 "單價": [10, 18, 15]}) 7df
13.1 加法計算
有兩種方式, 一種是利用add()函數: a.add(b) 表示a與b之和, 另一種是直接利用加法運算符號"+"
1 #第一種方式: 利用add()函數 2 # df["總銷量"] = df["前半年銷量"].add(df["後半年銷量"]) 3 #第二種方式: "+" 4 df["總銷量"] = df["前半年銷量"] + df["後半年銷量"] 5 df
兩者運算的結果都是相同的:
對於累加求和上述兩種方法同樣適用, 還有一種方式就是采用apply()函數, 參考文檔: https://blog.csdn.net/luckarecs/article/details/72869051
這裏介紹apply(func, axis = 0)函數的兩個參數, apply()函數官方文檔: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html?highlight=apply#pandas.DataFrame.apply
第一個參數func就是指用於每行或者每列的函數, 這裏將采用lambda函數: 接收任意多個參數並返回單個計算結果.
第二個參數axis=0則表示計算行與行的數據, axis=1則表示計算列與列的數據
1 #由於地區不能參與運算, 因此在df1數據表中刪除地區 2 df1 = df.drop(["地區","單價"], axis = 1, inplace = False) 3 #對df1數據表進行累加運算, 隨後添加到df表中. 4 df["總銷量"] = df1.apply(lambda x: x.sum(), axis = 1) 5 df
1 #刪除地區和單價,分別計算前半年與後半年的三個地區總和. 2 df2 = df.drop(["地區","單價"], axis = 1, inplace = False) 3 #利用apply函數計算之後,添加至數據表中 4 df.loc["Sum"] = df2.apply(lambda x: x.sum(), axis = 0 ) 5 df
13.2 減法運算
同樣有兩種方式: 一種是采用sub()函數, A.sub(B)表示A-B, 另一種是采用減法運算符 "-"
1 #函數法: 註意A.sub(B)表示A-B 2 df["銷量增長"] = df["後半年銷量"].sub(df["前半年銷量"]) 3 #運算符: "-" 4 df["銷量增長"] = df["後半年銷量"] - df["前半年銷量"] 5 df
兩種方式, 同樣的結果:
13.3 乘法運算
同樣是兩種方式: 一種是采用mul()函數: A.mul(B)表示: A與B之積, 另一種則是乘法運算符 "*"
1 #函數法: A.mul(B) 2 df["前半年銷售額"] = df["前半年銷量"].mul(df["單價"]) 3 #運算符: "*" 4 df["後半年銷售額"] = df["後半年銷量"] * df["單價"] 5 df
13.4 除法運算
同樣是兩種: 一種是采用div()函數: A.div(B)表示: A除以B, 第二種則是采用除法運算符"/"
1 #函數法 2 df["前半年銷量1"] = df["前半年銷量"].div(100) 3 #運算符法 4 df["前半年銷量2"] = df["前半年銷量"] / 1000 5 df
13.5 其他運算
13.5.1 取整和取余
1 #取整符號: "//" 2 df["後半年銷量1"] = df["後半年銷量"] // 1000 3 #取余符號: "%" 4 df["前半年銷量1"] = df["前半年銷量"] // 100 % 10 5 df
13.5.2 聚合運算
采用聚合函數對一組數據進行運算, 並返回單個值, 比如最大值max()函數, 最小值min()函數, 平均值mean()函數
1 #求前半年銷量最大值 2 df1 = df["前半年銷量"].max() 3 #求後半年銷量最小值 4 df2 = df["後半年銷量"].min() 5 #求單價的平均值 6 df3 = df["單價"].mean() 7 df1, df2 ,df3
(4500, 3000, 14.333333333333334)
14. 0-1標準化
0-1標準化是對原始數據進行線性變換, 使其結果映射成[0,1]區間的值, 計算公式為: 新數據 = (原數據 - 最小值) / (最大值 - 最小值)
1 import pandas as pd 2 df = pd.DataFrame({"地區": ["A區","B區", "C區", "D區", "E區", "F區"], 3 "銷量": [3500, 4500,3800,3000, 6000,5000]}) 4 #利用公式對原始數據進行0-1標準化處理 5 df["0-1"] = (df["銷量"] - df["銷量"].min()) / (df["銷量"].max() - df["銷量"].min()) 6 df
15. 數據分組
數據分組是根據統計研究的需求, 對原始數據按照某種標準劃分為不同的組別. 主要目的是觀察數據的分布特征. 在數據分組後再計算出各組中數據出現的的頻數, 最終形成頻數分布表.
pandas中數據分組采用的函數是cut(x, bins, right = True, labels = None)函數:
第一個參數x指的是要分組的數據
第二個參數bins指的是劃分標準, 也就是定義組的上限與下限
第三個參數right = True表示右邊閉合, 左邊不閉合; 當right = False時表示右邊不閉合, 左邊閉合, 默認為True.
第四個參數則是自定義分組的內容
更多cut()函數相關參考官方文檔: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html?highlight=cut#pandas.cut
1 import pandas as pd 2 df = pd.DataFrame({"地區": ["A區","B區", "C區", "D區", "E區", "F區", "G區"], 3 "單價": [ 8 , 20, 15, 7, 34, 25, 30]}) 4 #對單價進行編組: (5,15),(15,25),(25,35) 5 bins = [5, 15, 25, 35] 6 #利用cut()函數對單價進行分組, 並添加至原數據表中 7 df["分組"] = pd.cut(df.單價, bins) 8 df
自定義labels:
1 import pandas as pd 2 df = pd.DataFrame({"地區": ["A區","B區", "C區", "D區", "E區", "F區", "G區"], 3 "單價": [ 8 , 20, 15, 7, 34, 25, 30]}) 4 bins = [5, 15, 25, 35] 5 #自定義labels 6 labels = ["15以下", "15到25", "25以上"] 7 df["分組"] = pd.cut(df.單價, bins, labels = labels) 8 df
16. 日期轉換
日期轉換是指將字符類型轉換成日期格式.
16.1 to_datetime方法
可使用to_datetime(arg, format = None)函數轉換
第一個參數arg則是需要轉化的字符串, 比如"2018/09/01"
第二個參數format則是原字符串中日期的格式, 比如"2018/09/01"的格式為 "%Y/%m/%d"
常用的格式有: %y表示兩位數的年份, %Y表示四位數的年份, %m表示月份, %d表示月中的某一天, %H表示24小時制時數, %I表示12小時制時數, %M表示分鐘, %S表示秒
to_datetime()函數官方文檔: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html?highlight=to_datetime#pandas.to_datetime
1 import pandas as pd 2 df = pd.DataFrame({"name":["A","B","D"], 3 "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]}) 4 #轉成日期格式 5 df["BD"] = pd.to_datetime(df.BirthDate,format = "%Y/%m/%d") 6 df
1 #查看數據類型 2 df.dtypes
16.2 datetime.strptime()方法
借助datetime模塊中datetime類的strptime()方法, 將字符類型轉化為日期格式.
strptime(date_string, format)方法中有兩個參數, 第一個參數則是要轉化的字符串, 第二個參數則為字符串中日期的格式
1 import pandas as pd 2 from datetime import datetime 3 df = pd.DataFrame({"name":["A","B","D"], 4 "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]}) 5 #轉化為日期格式 6 df["BD"] = df["BirthDate"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d")) 7 df
17. 日期格式化
日期格式化就是將日期按照指定的格式輸出成字符類型, 這裏借助datetime模塊中datetime類的strftime()方法實現:
1 import pandas as pd 2 from datetime import datetime 3 df = pd.DataFrame({"name":["A","B","D"], 4 "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]}) 5 #轉化為日期格式 6 df["BD"] = df["BirthDate"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d")) 7 #日期格式化 8 df["BD1"] = df["BD"].apply(lambda x: datetime.strftime(x, "%d-%m-%Y %H:%M:%S")) 9 df
18.日期抽取
從日期格式中抽取日期的部分內容, 比如抽取年份, 月份等. 語法: 轉換為日期格式的列.dt.要抽取的屬性.
1 import pandas as pd 2 from datetime import datetime 3 df = pd.DataFrame({"name":["A","B","D"], 4 "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]}) 5 df["BD"] = df["BirthDate"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d")) 6 df["year"] = df["BD"].dt.year 7 df["month"] = df["BD"].dt.month 8 df["day"] = df["BD"].dt.day 9 df["hour"] = df["BD"].dt.hour 10 df["minute"] = df["BD"].dt.minute 11 df["second"] = df["BD"].dt.second 12 df["weekday"] = df["BD"].dt.weekday 13 df
以上是本次的學習總結, 後續會持續更新...
Python數據分析--Pandas知識點(二)