Pandas在数据分析中的应用
寫在文章的最前面,Python辦公自動化有什么用?使用Python代碼腳本取代繁復的手工操作,自動化,流程化處理數據。本文借助Python中的Pandas庫進行數據導入,關于如何學習Pandas,我們可以在其官方文檔進行學習,官網的地址如下。
Pandas官網https://www.pypandas.cn/
總結來說,使用pandas可以做數據整理與清洗、數據分析與建模、數據可視化與制表等。
靈活的分組功能:group by數據分組、聚合、轉換數據;
直觀地合并功能:merge數據連接;
靈活地重塑功能:reshape數據重塑;
一、數據導入、導出
如何使用Python導入.xlsx文件和.csv文件,導入.xlsx文件的參數如下所示,本文講解我們日常辦公所需要的一些參數。
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,usecols=None, squeeze=False,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skiprows=None,nrows=None,na_values=None,parse_dates=False,date_parser=None,thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)導入.xlsx文件
使用read_excel命令導入數據,寫入路徑即可導入數據。
#導入數據 df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx") df.head()nrows導入前4行數據。
#導入前4行數據df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",nrows=4) dfsheet_name指定導入的sheet表,在首映地點中選擇中國首映的sheet表。
#導入具體的sheet數據 df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",sheet_name = "中國首映") df.head()header指定第一行是否為列名,header=0,表示數據第一行為列名,header=None,表明數據沒有列名。
#header為0時,第一行作為列索引 df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",header = 0)df.head()index_col指定列作為行索引。
#index_col為1時,第二列作為行索引 df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",index_col = 1) df.head()usecols可以指定讀取的列名。
#選擇第二列,第六列數據 df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",usecols =[1,5]) df.head()skiprows跳過多少行再讀取數據。
#跳過第二行和第四行數據 df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",header=0,skiprows=[1,3]) df.head()names對選取的列重命名。
#對列命名 df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",usecols =[1,5],names=["電影名稱","上映日期"]) df.head()數據類型轉化
types查看字段的數據類型。
df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx") df.dtypesdtype轉化數據類型。
#轉化數據類型 df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",dtype={'投票人數':'int','評分':'int'}) df.dtypes數據導出
使用to_excel,寫入導出的路徑,進行數據導出,index=False消行索引。
import pandas as pd a={'銷量':[10,20],'售價':[100,200]} df=pd.DataFrame(a) df.to_excel(r'C:\Users\尚天強\Desktop\learn.xlsx',index=False) #取消行索引加入行索引,并使用index.name對其命名。
import?pandas?as?pd a={'銷量':[10,20],'售價':[100,200]} df=pd.DataFrame(a,index=['A','B'])?#加入一個行索引 df.index.name='貨號' df.to_excel(r'C:\Users\尚天強\Desktop\learn.xlsx')float_format設置浮點型數據的小數位,na_rep空值進行填充。
導入.csv文件
我們常使用的CSV文件有CSV UTF-8(逗號分隔)和CSV(逗號分隔)這兩種。
編碼方式設置
如果導出的文件為gbk編碼方式,導入數據的時候用gbk的編碼方式。encoding指定數據讀入的編碼方式。
#?如果導出的文件為gbk編碼方式,導入數據的時候用gbk? df = pd.read_csv(r"C:\Users\尚天強\Desktop\score.csv",encoding="gbk",nrows =2)#導入前兩行 df中文路徑導入數據
當文件路徑或文件名為中文時,如果是CSV UTF-8(逗號分隔)的格式文件,需要把編碼格式更改為utf-8-sig,如果是CSV(逗號分隔)的格式文件,需要把編碼格式更改為gbk。
當文件路徑或文件名為中文時,如果是CSV?UTF-8(逗號分隔)的格式文件,需要把編碼格式更改為utf-8-sig
如果是CSV(逗號分隔)的格式文件,需要把編碼格式更改為gbk 。
df?=?pd.read_csv(r'C:\Users\尚天強\Desktop\cars_scoreCSV.csv',engine="python",encoding="gbk") df.head()當文件路徑或文件名為中文時,如果是CSV UTF-8(逗號分隔)的格式文件,需要把編碼格式更改為utf-8-sig,如果是CSV(逗號分隔)的格式文件,需要把編碼格式更改為gbk 。
df?=?pd.read_csv(r'C:\Users\尚天強\Desktop\cars_scoreUTF-8.csv',engine="python",encoding="utf-8-sig")? df.head()二、數據字段、數據值篩選
一張表會包含很多字段,造成數據冗余,在做數據分析時,我們僅需要提取數據分析所需要的字段,這里就需要用到數據選取的知識點。本文構建數據表做數據索引,然后對數據內容進行調整,包含修改數據類型、去除空格、數據替換、截取字符等,最后做數據規整。
構建數據表
首先導入常用的庫,設置一些數據字段,構建一張數據表。
import pandas as pd import numpy as np import datetimedf = pd.DataFrame({'用戶ID':[1001,1002,1003,1004,1005,1006],'日期':pd.date_range(datetime.datetime(2021,3,23),periods=6),'城市':['北京', '上海', '廣州', '上海', '杭州', '北京'],'年齡':[23,44,54,32,34,32],'性別':['F','M','M','F','F','F'],'成交量':[3200,1356,2133,6733,2980,3452]},columns =['用戶ID','日期','城市','年齡','性別','成交量']) df數據索引
將數據索引進行修改,賦值一個列表。
#修改索引,直接賦值給Index即可 df.index=list('abcdef') df數據索引索引某行
有三種方法,一種是loc按照名字索引,另一種是iloc按照下標索引,Ix是loc和iloc的混合,既能按索引標簽提取,也能按位置進行數據提取。
#索引兩列 df.loc[:,['城市','成交量']]#索引前兩行,兩列 df.loc[['a','b'],['城市','成交量']]#獲取第一列、第二列數據 df.iloc[:,0:2]#獲取第二行、第三行,第一、二、三列的數據 df.iloc[[1, 2],[0, 1, 2]]#?僅取出第1行的數據 df.iloc[0]#索引全部行數據 df.iloc[:,[0, 1, 2]]#使用ix按索引標簽和位置混合提取數據 df.ix[:'2021-03-26',:3]條件篩選
#篩選性別為F的數據 df[df['性別']=='F']df[(df['城市']=='北京') & (df['年齡']>30)]#布爾索引加普通索引選擇指定的行和列 df[df['年齡']>30][['用戶ID','城市','成交量']]#切片索引加普通索引選擇指定的行和列 df.iloc[0:3][['用戶ID','城市','成交量']]數值排序
數據分類
#使用where進行判斷,條件滿足為第一個值,不滿足則返回第二個值 df['達成情況']=np.where(df['成交量']>3000,'達成量高','達成量低') df三、數據預處理
數據分析時,首先應對數據進行清洗,這里將數據清洗分為重復值處理、缺失值處理、異常值處理三個部分,重復值處理可刪除重復的字段,缺失值處理可以用線性插值、填充為0或用均值填充等,異常值處理用描述性分析、散點圖、箱形圖、直方圖查找異常并處理。本文使用超市商品交易數據,詳細介紹重復值處理、缺失值處理、異常值處理的方法,并實際運用數據進行演示,代碼操作如下所示。
重復值處理
首先對重復值計數。
df.duplicated().value_counts()用drop_duplicates的方法對某幾列下面的重復行刪除,subset:以某列作為基準列,判斷是否重復;keep: 保留哪個字段,fisrt參數保留首次出現的數值;inplace: 是否替換當前數據,True選擇替換當前數據。
df.drop_duplicates(subset=["商品碼"],keep='first',inplace=True) df.duplicated().value_counts()缺失值處理
通過isnull函數看一下是否有空值,結果是有空值的地方顯示為True,沒有的顯示為False。
df.head(11).isnull()使用info查看各個字段的屬性,標記的部分為缺失的部分。
df.info()通過isnull().any()查看每一列是否有空值,True返回缺失值。
df.isnull().any()用df.isnull().values==True來定位哪幾行是有空值的。
df[df.isnull().values==True]how='any'只要有一個缺失值就刪除,axis=0,刪除的是行,默認刪除的是行,inplace=True替換原始數據。
df.dropna(how='any', axis=0,inplace=True) df.info()缺失值填充
fillna(0)用0對缺失值進行填充。
df1=df[df.isnull().values==True] df1.fillna(0)limit用來限定填充的數量。
df1.fillna(0,limit=3){ }對不同的列填充不同的值,其中鍵作為列,值作為缺失值填充的值。
df1.fillna({"售價":0 ,"成交價":0 ,"進價": "#N/A"})method方法使用ffill,表示用前一個值作為填充的值。
df1.fillna(method="ffill")median方法使用中位數的值進行填充。
df1.fillna(df1.median())interpolate表示線性插值。
df[df.isnull().values==True].interpolate() #線性插值四、數據可視化
對于一些異常值的處理,可以使用散點圖和箱線圖進行數據標記,describe( )對統計字段進行描述性分析,從平均值、標準差,看數據的波動情況,最大值查看數據的極值。
散點圖
做出散點圖,查看數據中異常的點,圖中標記的點就是異常的點。
from matplotlib import pyplot as plt plt.rcParams["font.sans-serif"]='SimHei' #解決中文亂碼問題plt.scatter(df["售價"], df["進價"]) plt.title("散點圖",loc = "center") plt.show()箱線圖
做出箱線圖,反映原始數據分布的特征。
plt.subplot(1,2,1) plt.boxplot(df["數量"],labels = ["數量"])plt.subplot(1,2,2) plt.boxplot(df["售價金額"],labels?=?["售價金額"]) plt.show()折線圖
做售價金額的折線圖,售價金額呈波動趨勢。
plt.plot(df["售價金額"])用箱形圖的辦法,超過了上四分位1.5倍四分位距或下四分位1.5倍距離都算異常值,用中位數填充。
import?numpy?as?np a = df["售價金額"].quantile(0.75) b = df["售價金額"].quantile(0.25) c?=?df["售價金額"]c[(c>=(a-b)*1.5+a)|(c<=b-(a-b)*1.5)]=np.nan c.fillna(c.median(),inplace=True) c.describe()用標準差和均值,定義超過4倍就算異常值,同樣用中位數填充。
a = df["售價金額"].mean()+df["售價金額"].std()*4 b = df["售價金額"].mean()-df["售價金額"].std()*4 c = df["售價金額"] c[(c>=a)|(c<=b)]=np.nan c.fillna(c.median(),inplace=True) c.describe()正態分布圖
正態性檢驗,發現售價金額呈右偏分布,表明售價金額并不是正態分布。
import seaborn as sns sns.distplot(df['售價金額']) #解決負號無法正常顯示問題 plt.rcParams["axes.unicode_minus"]= False plt.show()-?END -
對比Excel系列圖書累積銷量達15w冊,讓你輕松掌握數據分析技能,可以在全網搜索書名進行了解:總結
以上是生活随笔為你收集整理的Pandas在数据分析中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸡蛋炸的酥脆的方法 炸鸡蛋做做法
- 下一篇: 4000字,25张精美交互图表,开启Pl