1. 程式人生 > >Python數據分析--Pandas知識點(二)

Python數據分析--Pandas知識點(二)

符號 time 就是 fun 參考 blank ref 除法 簡單

本文主要是總結學習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]})
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()函數官方文檔: 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知識點(二)