//2019.07.17
pyhton中pandas數據分析基礎入門(一文看懂pandas),
教你迅速入門pandas數據分析模塊(后面附有入門完整代碼,可以直接拷貝運行,含有詳細的代碼注釋,可以輕松幫助你入門理解)
1.1 pandas模塊簡介
首先,使用pandas相應的操作之前都需要導入pandas模塊
import pandas as pd
import numpy as np #導入pandas和numpy模塊
1、pandas中具有兩種常見的數據結構:
(1)Series
它是指一維列表或者數組(列向量),和numpy中的array比較類似,可以儲存很多不同類型的數據類型;
(2)DataFrame
二維型的數據結構,和Excel表格比較類似,它可以理解為是Series的容器。
1.2 pandas里面的series類型應用:
1、對於series的定義:
s=pd.Series([1,2,3,np.nan,2,3,1,...],index=["a","b","c","d","e"...])
其中對於index是對於每一行數字屬性的規定
2、對於series的索引index,其實質是指列表的行標簽,可以serie.index來進行查詢和輸出;
1.3 DataFrame二維列表的相關操作大全
(一)構造DataFrame二維列表的方式
1、對於DataFrame的二維列表數據的出入主要有兩種方式:傳入二維數組和使用字典的定義方法;
方式一:df=pd.DataFrame(np.random.randn(6,4)) #二維數組的傳入方法
方式二:df=pd.DataFrame({"A":[1,2,3,4,5],"B":["1,1,2,1,1"],"C":list("abcde"),"D":["yanjiangyi"]*5}) #字典的傳入方式
2、對於二維列表各行各列的屬性名稱定義主要采用的是index(各行名稱)和columns(各列名稱):
df=pd.DataFrame(np.random.randn(6,4),index=pd.date_range("20180701",periods=6,freq="M"),columns=[list("abcd")])
3、關於DateFrame的字典數據傳入方式,其中字典的key指的是列表的列名稱,即columns的取值,另外對於每一列的取值主要有以下六種方式,都可以傳入數組:
df=pd.DataFrame({"A":1.0,"B":np.array([3]*4,dtype=int),"C":pd.Timestamp("20190701"),"D":pd.Series([1.21,2.21,3.24,4.26],dtype=float),"E":pd.Categorical(["a","b","c","d"]),"F":"abc"})
(二)DataFrame二維數組的數據的查詢
1、頭尾數據查詢:采用函數.head(x)和.tail(x)可以查詢前后x行的數據;
2、查看表格數據的每一列數據類型可以采用df.dtypes來進行查看數據類型;
1.4pandas讀取數據及其數據操作
1、pandas讀取表格數據的方式是采用自帶的函數pd.read_excle(表格的路徑)和pd.read_csv(表格的路徑)
例如:
df=pd.read_excel("D:/Byrbt2018/Study/Python數據分析課程+練習+講解/Python數據分析課程+練習+講解/作業/作業3/作業3/香港酒店數據.xlsx") #表格的讀取操作主要依靠的是pd.read_excel/csv函數+文件路徑
2、提取表格中的某幾行某幾列數據的方式:
(1)采用屬性名稱的方式:
df.loc[行屬性A:行屬性B,列屬性:列屬性]
(2)采用表格下標的方式:
df.iloc[行序號:行序號,列序號:列序號]
(3)直接采用數組的方式:
df[[列屬性1,列屬性2,列屬性3...]][行號:行號]
(4)采用標准格式:
df.loc[[index,,...],[columns,,...]] #先行后列
3、表格行的增加和刪減
(1)增加一行:
先用字典定義好這一行的新的數據(字典的key是表格的各列屬性),然后將其轉換為series一維列表,之后采用表格的增添函數df.append(s)來進行添加這一行的數據,另外還可以用s.name來定義新添加行的行屬性名稱
s={0:"天水賓館",1:"休閑娛樂",2:"天水",3:"甘谷縣",4:"中關村街道",5:4.5,6:11000,7:345} #先定義一行數據,利用字典的操作來進行定義新的一行
s1=pd.Series(s) #轉換字典為一維列表
s1.name=420 #定義列表的行屬性
(2)刪減其中一行:
直接調用pandas模塊的刪減函數df.drop([行號])函數來進行刪減相應需要刪減的某一行數據。
4、列的相關操作
(1)列的增加:
列的增加通過直接增加定義就可以:
df["序號"]=range(1,len(df)+1) #增加了序號這一個新的列
(2)列的刪減:
列的刪減可以通過df.drop["列屬性名稱",axis=1]來進行操作,其中axis=1必須要設置,他表示刪除的是列而不是行,如果不寫axis或者設置axis=0,表示的是要進行刪減的行:
df.drop["列屬性名稱",axis=1]
5、有關數據條件選擇的操作:
關於數據條件性選擇主要可以采用df[(選擇條件)]來繼續操作,舉例如下:
print(df[df.評分>4.5]) #選擇評分高於4.5的數據列表
print(df[(df.評分>4.5 )& (df.類型=="浪漫情侶")]) #選擇評分高於4.5並且類型屬於浪漫情侶的數據列表
print(df[((df.類型=="香港")|(df.日常人數>1000))&(df.評分>4.5)])
#選擇類型時香港或者日常人數超過1000人的,並且評分高於4.5的數據列表
6、對於數據缺失值和異常值的處理操作:
(1)缺失值的處理主要包含以下四個操作:
isnull(返回一個布爾型的數據類型,判斷是否為缺失值)
notnull(和isnull正好相反,判斷不是缺失值)
fillna(對於缺失值進行填充)
dropna(對於缺失值進行相應的刪減過濾)
(2)缺失值的處理規則:
#數據缺失值及其異常值的處理
對於缺失值的刪減dropna()主要有三個參數:how=all(刪掉所有 行和列),inplace=Ture(實時對於刪減的表格進行更新),axis=0或者1(刪減處理的是行或列)
print(df.isnull())
print(df[df["評分"].isnull()]) #缺失值的判斷和輸出
#對於缺失值的填充
print(df[df["評價人數"].isnull()]) #首先判斷是否有殘缺值
df["評價人數"].fillna(np.mean(df["評價人數"]),inplace=True) #缺失值的填充和實時更新inplace=1
print(df)
print(len(df[df["評價人數"].isnull()]))
print(len(df))
print(len(df.dropna()))
df.dropna(inplace=True)
print(len(df))
#異常值的處理
異常值一般主要是判斷表格里面的數據是否和列屬性的性質不符(比如對於人數屬性的列數據存在一小數點負數的情況),然后結合判斷的情況進行數據的處理和更新
print(len(df[df["日常人數"]%1!=0])) #對於異常值的判斷和處理
df=df[(df["日常人數"]%1==0)&(df["日常人數"]>0)] #根據異常值的條件進行實時更新
print(df)
整體的入門運行代碼如下所示(可以直接拷貝運行,含有詳細的代碼注釋,可以輕松幫助你入門理解):
import pandas as pd
import numpy as np #導入pandas和numpy模塊
# Series一維列表操作
s=pd.Series([1,2,3,4,np.nan,2,3,4,6,7])
print(s)
print(s.index) #輸出series的行標簽(屬性)
print(s.values) #輸出series的取值
print(s[2:9:2]) #隔行輸出相應的值(切片操作)
s.index.name="屬性" #定義列表series的屬性名稱
print(s)
s.index=list("abcdefghij") #重新定義表格每一行的屬性名字
print(s)
print(s["a":"h":2]) #提取其中一部分,進行相關的的切片操作
# Dataframe二維列表操作大全
date=pd.date_range("20180101",periods=6,freq="D") #生成時間序列
print(date)
df=pd.DataFrame(np.random.randn(6,4),index=date,columns=list("abcd")) #定義隨機數的二維列表6x4,然后定義各行各列的名稱(index和columns)
df.index.name="date"
print(df)
df1=pd.DataFrame({"A":1.0,"B":np.array([3]*4,dtype=int),"C":pd.Timestamp("20190701"),"D":pd.Series([1.21,2.21,3.24,4.26],dtype=float),"E":pd.Categorical(["a","b","c","d"]),"F":"abc"})
print(df1)
print(df1.values) #查看數據的值
print(df1.index) #查看數據的行屬性名稱
print(df1.head(3)) #c查看數據的前三行
print(df1.tail(3)) #查看數據的后三行
print(df1.dtypes) #查看表格數據的每一類數據類型
#數據表格的讀取與各種操作
df=pd.read_excel("D:/Byrbt2018/Study/Python數據分析課程+練習+講解/Python數據分析課程+練習+講解/作業/作業3/作業3/香港酒店數據.xlsx") #表格的讀取操作主要依靠的是pd.read_excel/csv函數+文件路徑
print(df)
#表格的行操作
print(df.iloc[0]) #采用下標的形式來進行數據的查詢df.iloc[:,;]
print(df.iloc[:5]) #采用下標的形式來進行數據的查詢df.iloc[:,;]
print(df.loc[0:5,0:3]) #采用行和列屬性的形式來進行數據的查詢df.iloc[:,;]
#增加一行操作
s={0:"天水賓館",1:"休閑娛樂",2:"天水",3:"甘谷縣",4:"中關村街道",5:4.5,6:11000,7:345} #先定義一行數據,利用字典的操作來進行定義新的一行
s1=pd.Series(s) #轉換字典為一維列表
s1.name=420 #定義列表的行屬性
print(s1)
df=df.append(s1) #增加一行數據操作(需要重新定義列表)
print(df)
print(df[-5:])
df=df.drop([420]) #刪除某一行數據操作(需要重新定義列表)
print(df)
df.columns=["名稱","類型","城市","地區","街道","評分","評價人數","日常人數"] #改變表格的各列名稱
print(df)
print(type(df.index))
print(df.columns)
print(df["名稱"])
#提取某幾行某幾列數據的三種方法(df.loc[;,;,iloc[;,;],df[[,,][:])
print(df[["名稱","類型"]][:5]) #提取某幾列某幾行
print(df.iloc[0:5,0:3]) #提取某行某列(行在前,列在后)
print(df.loc[1:40,"類型":"評分"])
print(df[["名稱","評分","城市"]][0:400:20]) #列在前,行在后
#列的相關操作
df["序號"]=range(1,len(df)+1) #增加列的操作
print(df[:5])
df=df.drop("序號",axis=1) #刪減列時采用.drop函數,此時drop(x,axis=1)x表示列的名稱,axis=1表示刪除的是列,不寫axis表示它為0,刪除的默認是行
print(df)
print(df.loc[[1,2,3,5,10],["類型","評分"]]) #標准形式提取表格中的數據
#條件選擇的數據操作
print(df[df.評分>4.5])
print(df[(df.評分>4.5 )& (df.類型=="浪漫情侶")])
print(df[((df.類型=="香港")|(df.日常人數>1000))&(df.評分>4.5)])
#數據缺失值及其異常值的處理
print(df.isnull())
print(df[df["評分"].isnull()]) #缺失值的判斷和輸出
#對於缺失值的填充
print(df[df["評價人數"].isnull()]) #首先判斷是否有殘缺值
df["評價人數"].fillna(np.mean(df["評價人數"]),inplace=True) #缺失值的填充和實時更新inplace=1
print(df)
print(len(df[df["評價人數"].isnull()]))
print(len(df))
print(len(df.dropna()))
df.dropna(inplace=True)
print(len(df))
print(len(df[df["日常人數"]%1!=0])) #對於異常值的判斷和處理
df=df[(df["日常人數"]%1==0)&(df["日常人數"]>0)] #根據異常值的條件進行實時更新
print(df)