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]}) 7 df
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()函式官方文件:
第一個引數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
原文來自:https://www.cnblogs.com/star-zhao/p/9715307.html