久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

像Excel一樣使用python進行數(shù)據(jù)分析

 xionggeng99 2021-06-16

Excel是數(shù)據(jù)分析中最常用的工具,本篇文章通過python與excel的功能對比介紹如何使用python通過函數(shù)式編程完成excel中的數(shù)據(jù)處理及分析工作,。在Python中pandas庫用于數(shù)據(jù)處理,我們從1787頁的pandas官網(wǎng)文檔中總結(jié)出最常用的36個函數(shù),,通過這些函數(shù)介紹如何通過python完成數(shù)據(jù)生成和導入,,數(shù)據(jù)清洗,預處理,,以及最常見的數(shù)據(jù)分類,,數(shù)據(jù)篩選,分類匯總,,透視等最常見的操作,。

這個系列文章內(nèi)容共分為9個部分。已由人民郵電出版社出版,,感興趣的朋友可以在異步社區(qū)獲取完整版,。

excel_python

第一篇文章鏈接在這里:像Excel一樣使用python進行數(shù)據(jù)分析-(1)

本篇文章這是系列的第二篇,,介紹第4-6部分的內(nèi)容,數(shù)據(jù)表生成,,數(shù)據(jù)表查看,,和數(shù)據(jù)清洗。

4-6目錄
4,,數(shù)據(jù)預處理

第四部分是數(shù)據(jù)的預處理,,對清洗完的數(shù)據(jù)進行整理以便后期的統(tǒng)計和分析工作。主要包括數(shù)據(jù)表的合并,,排序,,數(shù)值分列,數(shù)據(jù)分
組及標記等工作,。

數(shù)據(jù)表合并

首先是對不同的數(shù)據(jù)表進行合并,,我們這里創(chuàng)建一個新的數(shù)據(jù)表df1,并將df和df1兩個數(shù)據(jù)表進行合并,。在Excel中沒有直接完成數(shù)據(jù)表合并的功能,,可以通過VLOOKUP函數(shù)分步實現(xiàn)。在python中可以通過merge函數(shù)一次性實現(xiàn),。下面建立df1數(shù)據(jù)表,,用于和df數(shù)據(jù)表進行合并。

#創(chuàng)建df1數(shù)據(jù)表 df1=pd.DataFrame({'id':[1001,1002,1003,1004,1005,1006,1007,1008], 'gender':['male','female','male','female','male','female','male','female'], 'pay':['Y','N','Y','Y','N','Y','N','Y',], 'm-point':[10,12,20,40,40,40,30,20]})

df1

使用merge函數(shù)對兩個數(shù)據(jù)表進行合并,,合并的方式為inner,,將兩個數(shù)據(jù)表中共有的數(shù)據(jù)匹配到一起生成新的數(shù)據(jù)表。并命名為df_inner,。

#數(shù)據(jù)表匹配合并,,inner模式
df_inner=pd.merge(df,df1,how='inner')

df_inner

除了inner方式以外,合并的方式還有l(wèi)eft,,right和outer方式。這幾種方式的差別在我其他的文章中有詳細的說明和對比,。

#其他數(shù)據(jù)表匹配模式 df_left=pd.merge(df,df1,how='left') df_right=pd.merge(df,df1,how='right') df_outer=pd.merge(df,df1,how='outer')

設(shè)置索引列

完成數(shù)據(jù)表的合并后,,我們對df_inner數(shù)據(jù)表設(shè)置索引列,索引列的功能很多,,可以進行數(shù)據(jù)提取,,匯總,也可以進行數(shù)據(jù)篩選等,。
設(shè)置索引的函數(shù)為set_index,。

#設(shè)置索引列
df_inner.set_index('id')

df_inner_set_index
排序(按索引,按數(shù)值)

Excel中可以通過數(shù)據(jù)目錄下的排序按鈕直接對數(shù)據(jù)表進行排序,,比較簡單,。Python中需要使用ort_values函數(shù)和sort_index函數(shù)完成排序,。

排序

在python中,既可以按索引對數(shù)據(jù)表進行排序,,也可以看制定列的數(shù)值進行排序,。首先我們按age列中用戶的年齡對數(shù)據(jù)表進行排序。
使用的函數(shù)為sort_values,。

#按特定列的值排序 df_inner.sort_values(by=['age'])

sort_values

Sort_index函數(shù)用來將數(shù)據(jù)表按索引列的值進行排序,。

#按索引列排序
df_inner.sort_index()

sort_index
數(shù)據(jù)分組

Excel中可以通過VLOOKUP函數(shù)進行近似匹配來完成對數(shù)值的分組,或者使用“數(shù)據(jù)透視表”來完成分組,。相應(yīng)的 python中使用where函數(shù)完成數(shù)據(jù)分組,。

Where函數(shù)用來對數(shù)據(jù)進行判斷和分組,下面的代碼中我們對price列的值進行判斷,,將符合條件的分為一組,,不符合條件的分為另一組,并使用group字段進行標記,。

#如果price列的值>3000,,group列顯示high,否則顯示low df_inner['group'] = np.where(df_inner['price'] > 3000,'high','low')

where

除了where函數(shù)以外,,還可以對多個字段的值進行判斷后對數(shù)據(jù)進行分組,,下面的代碼中對city列等于beijing并且price列大于等于4000的數(shù)據(jù)標記為1。

#對復合多個條件的數(shù)據(jù)進行分組標記
df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign']=1

sign
數(shù)據(jù)分列

與數(shù)據(jù)分組相反的是對數(shù)值進行分列,,Excel中的數(shù)據(jù)目錄下提供“分列”功能,。在python中使用split函數(shù)實現(xiàn)分列。

數(shù)據(jù)分列
在數(shù)據(jù)表中category列中的數(shù)據(jù)包含有兩個信息,,前面的數(shù)字為類別id,,后面的字母為size值。中間以連字符進行連接,。我們使用split函數(shù)對這個字段進行拆分,,并將拆分后的數(shù)據(jù)表匹配回原數(shù)據(jù)表中。

#對category字段的值依次進行分列,,并創(chuàng)建數(shù)據(jù)表,,索引值為df_inner的索引列,列名稱為category和size pd.DataFrame((x.split('-') for x in df_inner['category']),index=df_inner.index,columns=['category','size'])

split

#將完成分列后的數(shù)據(jù)表與原df_inner數(shù)據(jù)表進行匹配
df_inner=pd.merge(df_inner,split,right_index=True, left_index=True)

merge_1
5,,數(shù)據(jù)提取

第五部分是數(shù)據(jù)提取,,也是數(shù)據(jù)分析中最常見的一個工作。這部分主要使用三個函數(shù),,loc,,iloc和ix,loc函數(shù)按標簽值進行提取,,iloc按位置進行提取,,ix可以同時按標簽和位置進行提取,。下面介紹每一種函數(shù)的使用方法。

按標簽提取(loc)

Loc函數(shù)按數(shù)據(jù)表的索引標簽進行提取,,下面的代碼中提取了索引列為3的單條數(shù)據(jù),。

#按索引提取單行的數(shù)值 df_inner.loc[3] id 1004 date 2013-01-05 00:00:00 city shenzhen category 110-C age 32 price 5433 gender female m-point 40 pay Y group high sign NaN category_1 110 size C Name: 3, dtype: object

使用冒號可以限定提取數(shù)據(jù)的范圍,冒號前面為開始的標簽值,,后面為結(jié)束的標簽值,。下面提取了0到5的數(shù)據(jù)行。

#按索引提取區(qū)域行數(shù)值
df_inner.loc[0:5]

df_inner_loc1

Reset_index函數(shù)用于恢復索引,,這里我們重新將date字段的日期設(shè)置為數(shù)據(jù)表的索引,,并按日期進行數(shù)據(jù)提取。

#重設(shè)索引 df_inner.reset_index()

reset_index

#設(shè)置日期為索引
df_inner=df_inner.set_index('date')

set_index_date

使用冒號限定提取數(shù)據(jù)的范圍,,冒號前面為空表示從0開始,。提取所有2013年1月4日以前的數(shù)據(jù)。

#提取4日之前的所有數(shù)據(jù) df_inner[:'2013-01-04']

按提起提取

按位置提取(iloc)

使用iloc函數(shù)按位置對數(shù)據(jù)表中的數(shù)據(jù)進行提取,,這里冒號前后的數(shù)字不再是索引的標簽名稱,,而是數(shù)據(jù)所在的位置,從0開始,。

#使用iloc按位置區(qū)域提取數(shù)據(jù)
df_inner.iloc[:3,:2]

iloc1

iloc函數(shù)除了可以按區(qū)域提取數(shù)據(jù),,還可以按位置逐條提取,前面方括號中的0,2,5表示數(shù)據(jù)所在行的位置,,后面方括號中的數(shù)表示所在列的位置,。

#使用iloc按位置單獨提取數(shù)據(jù) df_inner.iloc[[0,2,5],[4,5]]

iloc2

按標簽和位置提取(ix)

ix是loc和iloc的混合,,既能按索引標簽提取,,也能按位置進行數(shù)據(jù)提取。下面代碼中行的位置按索引日期設(shè)置,,列按位置設(shè)置,。

#使用ix按索引標簽和位置混合提取數(shù)據(jù)
df_inner.ix[:'2013-01-03',:4]

ix
按條件提取(區(qū)域和條件值)

除了按標簽和位置提起數(shù)據(jù)以外,,還可以按具體的條件進行數(shù)據(jù),。下面使用loc和isin兩個函數(shù)配合使用,按指定條件對數(shù)據(jù)進行提取 ,。

使用isin函數(shù)對city中的值是否為beijing進行判斷。

#判斷city列的值是否為beijing df_inner['city'].isin(['beijing']) date 2013-01-02 True 2013-01-05 False 2013-01-07 True 2013-01-06 False 2013-01-03 False 2013-01-04 False Name: city, dtype: bool

將isin函數(shù)嵌套到loc的數(shù)據(jù)提取函數(shù)中,,將判斷結(jié)果為Ture數(shù)據(jù)提取出來,。這里我們把判斷條件改為city值是否為beijing和 shanghai。如果是就把這條數(shù)據(jù)提取出來,。

#先判斷city列里是否包含beijing和shanghai,,然后將復合條件的數(shù)據(jù)提取出來,。
df_inner.loc[df_inner['city'].isin(['beijing','shanghai'])]

loc按篩選條件提取

數(shù)值提取還可以完成類似數(shù)據(jù)分列的工作,從合并的數(shù)值中提取出制定的數(shù)值,。

category=df_inner['category'] 0 100-A 3 110-C 5 130-F 4 210-A 1 100-B 2 110-A Name: category, dtype: object
#提取前三個字符,,并生成數(shù)據(jù)表
pd.DataFrame(category.str[:3])

category_str
6,數(shù)據(jù)篩選

第六部分為數(shù)據(jù)篩選,,使用與,,或,非三個條件配合大于,,小于和等于對數(shù)據(jù)進行篩選,,并進行計數(shù)和求和。與excel中的篩選功能和countifs和sumifs功能相似,。

按條件篩選(與,,或,非)

Excel數(shù)據(jù)目錄下提供了“篩選”功能,,用于對數(shù)據(jù)表按不同的條件進行篩選,。Python中使用loc函數(shù)配合篩選條件來完成篩選功能。配合sum和count函數(shù)還能實現(xiàn)excel中sumif和countif函數(shù)的功能,。

篩選
使用“與”條件進行篩選,,條件是年齡大于25歲,并且城市為beijing,。篩選后只有一條數(shù)據(jù)符合要求,。

#使用“與”條件進行篩選 df_inner.loc[(df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']]

與

使用“或”條件進行篩選,年齡大于25歲或城市為beijing,。篩選后有6條數(shù)據(jù)符合要求,。

#使用“或”條件篩選
df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']].sort
(['age'])

或

在前面的代碼后增加price字段以及sum函數(shù),按篩選后的結(jié)果將price字段值進行求和,,相當于excel中sumifs的功能,。

#對篩選后的數(shù)據(jù)按price字段進行求和 df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id','city','age','category','gender','price']].sort(['age']).price.sum() 19796

使用“非”條件進行篩選,城市不等于beijing,。符合條件的數(shù)據(jù)有4條,。將篩選結(jié)果按id列進行排序。

#使用“非”條件進行篩選
df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id'])

非

在前面的代碼后面增加city列,,并使用count函數(shù)進行計數(shù),。相當于excel中的countifs函數(shù)的功能。

#對篩選后的數(shù)據(jù)按city列進行計數(shù) df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']).city.count() 4

還有一種篩選的方式是用query函數(shù),。下面是具體的代碼和篩選結(jié)果,。

#使用query函數(shù)進行篩選
df_inner.query('city == ['beijing', 'shanghai']')

query

在前面的代碼后增加price字段和sum函數(shù)。對篩選后的price字段進行求和,,相當于excel中的sumifs函數(shù)的功能,。

#對篩選后的結(jié)果按price進行求和 df_inner.query('city == ['beijing', 'shanghai']').price.sum() 12230

下一篇文章,,也就是本系列的最后一篇我們將介紹7-9最后三部分的內(nèi)容,分別為數(shù)據(jù)匯總,,數(shù)據(jù)統(tǒng)計和數(shù)據(jù)輸出,。請朋友們繼續(xù)關(guān)注 。

—【所有文章及圖片版權(quán)歸 藍鯨(王彥平)所有,。歡迎轉(zhuǎn)載,,但請注明轉(zhuǎn)自“藍鯨網(wǎng)站分析博客”?!俊?nbsp;

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多