<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas在數(shù)據(jù)分析中的應用

          共 6533字,需瀏覽 14分鐘

           ·

          2022-03-06 16:33


          寫在文章的最前面,Python辦公自動化有什么用?使用Python代碼腳本取代繁復的手工操作,自動化流程化處理數(shù)據(jù)。本文借助Python中的Pandas庫進行數(shù)據(jù)導入,關于如何學習Pandas,我們可以在其官方文檔進行學習,官網(wǎng)的地址如下。

          Pandas官網(wǎng)https://www.pypandas.cn/

          總結來說,使用pandas可以做數(shù)據(jù)整理與清洗、數(shù)據(jù)分析與建模、數(shù)據(jù)可視化與制表等。

          • 靈活的分組功能:group by數(shù)據(jù)分組、聚合、轉換數(shù)據(jù);

          • 直觀地合并功能:merge數(shù)據(jù)連接;

          • 靈活地重塑功能:reshape數(shù)據(jù)重塑;

          一、數(shù)據(jù)導入、導出

          如何使用Python導入.xlsx文件和.csv文件,導入.xlsx文件的參數(shù)如下所示,本文講解我們?nèi)粘^k公所需要的一些參數(shù)。
          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命令導入數(shù)據(jù),寫入路徑即可導入數(shù)據(jù)。

          #導入數(shù)據(jù)df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx")df.head()

          nrows導入前4行數(shù)據(jù)。

          #導入前4行數(shù)據(jù)

          df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",nrows=4)df

          sheet_name指定導入的sheet表,在首映地點中選擇中國首映的sheet表。

          #導入具體的sheet數(shù)據(jù)df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",sheet_name = "中國首映")df.head()

          header指定第一行是否為列名,header=0,表示數(shù)據(jù)第一行為列名,header=None,表明數(shù)據(jù)沒有列名。

          #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可以指定讀取的列名。

          #選擇第二列,第六列數(shù)據(jù)df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",usecols =[1,5])df.head()

          skiprows跳過多少行再讀取數(shù)據(jù)。

          #跳過第二行和第四行數(shù)據(jù)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()

          數(shù)據(jù)類型轉化

          types查看字段的數(shù)據(jù)類型。

          df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx")df.dtypes

          dtype轉化數(shù)據(jù)類型。

          #轉化數(shù)據(jù)類型df = pd.read_excel(r"C:\Users\尚天強\Desktop\film_score.xlsx",dtype={'投票人數(shù)':'int','評分':'int'})df.dtypes

          數(shù)據(jù)導出

          使用to_excel,寫入導出的路徑,進行數(shù)據(jù)導出,index=False消行索引。

          import pandas as pda={'銷量':[10,20],'售價':[100,200]}df=pd.DataFrame(a)df.to_excel(r'C:\Users\尚天強\Desktop\learn.xlsx',index=False) #取消行索引

          加入行索引,并使用index.name對其命名。

          import?pandas?as?pda={'銷量':[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設置浮點型數(shù)據(jù)的小數(shù)位,na_rep空值進行填充。

          import pandas as pda={'銷量':[10,20.43],'售價':[100.25,None]}df=pd.DataFrame(a,index=['A','B']) #加入一個行索引df.index.name='貨號'df.to_excel(r'C:\Users\尚天強\Desktop\learn.xlsx',sheet_name='第一張表',float_format='%.2f',na_rep='空值')

          導入.csv文件

          我們常使用的CSV文件有CSV UTF-8(逗號分隔)和CSV(逗號分隔)這兩種。

          編碼方式設置

          如果導出的文件為gbk編碼方式,導入數(shù)據(jù)的時候用gbk的編碼方式。encoding指定數(shù)據(jù)讀入的編碼方式。

          #?如果導出的文件為gbk編碼方式,導入數(shù)據(jù)的時候用gbk?df = pd.read_csv(r"C:\Users\尚天強\Desktop\score.csv",encoding="gbk",nrows =2)#導入前兩行 df

          中文路徑導入數(shù)據(jù)

          當文件路徑或文件名為中文時,如果是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()

          二、數(shù)據(jù)字段、數(shù)據(jù)值篩選

          一張表會包含很多字段,造成數(shù)據(jù)冗余,在做數(shù)據(jù)分析時,我們僅需要提取數(shù)據(jù)分析所需要的字段,這里就需要用到數(shù)據(jù)選取的知識點。本文構建數(shù)據(jù)表做數(shù)據(jù)索引,然后對數(shù)據(jù)內(nèi)容進行調整,包含修改數(shù)據(jù)類型、去除空格、數(shù)據(jù)替換、截取字符等,最后做數(shù)據(jù)規(guī)整。

          構建數(shù)據(jù)表

          首先導入常用的庫,設置一些數(shù)據(jù)字段,構建一張數(shù)據(jù)表。

          import pandas as pdimport numpy as npimport datetime
          df = 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

          數(shù)據(jù)索引

          將數(shù)據(jù)索引進行修改,賦值一個列表。

          #修改索引,直接賦值給Index即可df.index=list('abcdef')df

          數(shù)據(jù)索引索引某行

          有三種方法,一種是loc按照名字索引,另一種是iloc按照下標索引,Ix是loc和iloc的混合,既能按索引標簽提取,也能按位置進行數(shù)據(jù)提取。

          #索引兩列df.loc[:,['城市','成交量']]

          #索引前兩行,兩列df.loc[['a','b'],['城市','成交量']]

          #獲取第一列、第二列數(shù)據(jù)df.iloc[:,0:2]

          #獲取第二行、第三行,第一、二、三列的數(shù)據(jù)df.iloc[[1, 2],[0, 1, 2]]

          #?僅取出第1行的數(shù)據(jù)df.iloc[0]

          #索引全部行數(shù)據(jù)df.iloc[:,[0, 1, 2]]

          #使用ix按索引標簽和位置混合提取數(shù)據(jù)df.ix[:'2021-03-26',:3]

          條件篩選

          #篩選性別為F的數(shù)據(jù)df[df['性別']=='F']

          df[(df['城市']=='北京') & (df['年齡']>30)]

          #布爾索引加普通索引選擇指定的行和列df[df['年齡']>30][['用戶ID','城市','成交量']]

          #切片索引加普通索引選擇指定的行和列df.iloc[0:3][['用戶ID','城市','成交量']]

          數(shù)值排序

          #排序,以成交量降序排列df.sort_values(['成交量'],ascending=False)

          數(shù)據(jù)分類

          #使用where進行判斷,條件滿足為第一個值,不滿足則返回第二個值df['達成情況']=np.where(df['成交量']>3000,'達成量高','達成量低')df

          三、數(shù)據(jù)預處理

          數(shù)據(jù)分析時,首先應對數(shù)據(jù)進行清洗,這里將數(shù)據(jù)清洗分為重復值處理、缺失值處理、異常值處理三個部分,重復值處理可刪除重復的字段,缺失值處理可以用線性插值、填充為0或用均值填充等,異常值處理用描述性分析、散點圖、箱形圖、直方圖查找異常并處理。本文使用超市商品交易數(shù)據(jù),詳細介紹重復值處理、缺失值處理、異常值處理的方法,并實際運用數(shù)據(jù)進行演示,代碼操作如下所示。

          #導入數(shù)據(jù)import?pandas?as?pddf=pd.read_csv(r"C:\Users\尚天強\Desktop\超市商品交易.csv",engine="python",encoding="utf-8-sig")df.head()

          重復值處理

          首先對重復值計數(shù)。

          df.duplicated().value_counts()

          用drop_duplicates的方法對某幾列下面的重復行刪除,subset:以某列作為基準列,判斷是否重復;keep: 保留哪個字段,fisrt參數(shù)保留首次出現(xiàn)的數(shù)值;inplace: 是否替換當前數(shù)據(jù),True選擇替換當前數(shù)據(jù)。

          df.drop_duplicates(subset=["商品碼"],keep='first',inplace=True)df.duplicated().value_counts()

          缺失值處理

          通過isnull函數(shù)看一下是否有空值,結果是有空值的地方顯示為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替換原始數(shù)據(jù)。

          df.dropna(how='any', axis=0,inplace=True)df.info()

          缺失值填充

          fillna(0)用0對缺失值進行填充。

          df1=df[df.isnull().values==True]df1.fillna(0)

          limit用來限定填充的數(shù)量。

          df1.fillna(0,limit=3)

          { }對不同的列填充不同的值,其中鍵作為列,值作為缺失值填充的值。

          df1.fillna({"售價":0 ,"成交價":0 ,"進價": "#N/A"})

          method方法使用ffill,表示用前一個值作為填充的值。

          df1.fillna(method="ffill")

          median方法使用中位數(shù)的值進行填充。

          df1.fillna(df1.median())


          interpolate表示線性插值。

          df[df.isnull().values==True].interpolate() #線性插值

          四、數(shù)據(jù)可視化

          對于一些異常值的處理,可以使用散點圖和箱線圖進行數(shù)據(jù)標記,describe( )對統(tǒng)計字段進行描述性分析,從平均值、標準差,看數(shù)據(jù)的波動情況,最大值查看數(shù)據(jù)的極值。

          df[['售價','進價']].describe()

          散點圖

          做出散點圖,查看數(shù)據(jù)中異常的點,圖中標記的點就是異常的點。

          from matplotlib import pyplot as pltplt.rcParams["font.sans-serif"]='SimHei' #解決中文亂碼問題
          plt.scatter(df["售價"], df["進價"])plt.title("散點圖",loc = "center")plt.show()

          箱線圖

          做出箱線圖,反映原始數(shù)據(jù)分布的特征。

          plt.subplot(1,2,1)plt.boxplot(df["數(shù)量"],labels = ["數(shù)量"])
          plt.subplot(1,2,2)plt.boxplot(df["售價金額"],labels?=?["售價金額"])plt.show()

          折線圖

          做售價金額的折線圖,售價金額呈波動趨勢。

          plt.plot(df["售價金額"])

          用箱形圖的辦法,超過了上四分位1.5倍四分位距或下四分位1.5倍距離都算異常值,用中位數(shù)填充。

          import?numpy?as?npa = 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.nanc.fillna(c.median(),inplace=True)c.describe()

          用標準差和均值,定義超過4倍就算異常值,同樣用中位數(shù)填充。

          a = df["售價金額"].mean()+df["售價金額"].std()*4b = df["售價金額"].mean()-df["售價金額"].std()*4c = df["售價金額"]c[(c>=a)|(c<=b)]=np.nanc.fillna(c.median(),inplace=True)c.describe()

          正態(tài)分布圖
          正態(tài)性檢驗,發(fā)現(xiàn)售價金額呈右偏分布,表明售價金額并不是正態(tài)分布。
          import seaborn as snssns.distplot(df['售價金額'])#解決負號無法正常顯示問題plt.rcParams["axes.unicode_minus"]= Falseplt.show()

          -?END -
          對比Excel系列圖書累積銷量達15w冊,讓你輕松掌握數(shù)據(jù)分析技能,可以在全網(wǎng)搜索書名進行了解:
          瀏覽 90
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品久久一区二区三区四区五区 | 后入极品美女在线 | 丁香五月激情六月 | 偷拍六区 | h片在线免费播放 |