日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pandas在数据分析中的应用

發布時間:2023/12/19 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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) df

sheet_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.dtypes

dtype轉化數據類型。

#轉化數據類型 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空值進行填充。

import pandas as pd a={'銷量':[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編碼方式,導入數據的時候用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','城市','成交量']]

數值排序

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

數據分類

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

三、數據預處理

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

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

重復值處理

首先對重復值計數。

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( )對統計字段進行描述性分析,從平均值、標準差,看數據的波動情況,最大值查看數據的極值。

df[['售價','進價']].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在数据分析中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。