先感受一下數(shù)據(jù)科學(xué)的魅力,上圖是在Smart Dubai 2017 GITEX科技周展臺(tái)上推出Smart Decision-Making Platform(智能決策平臺(tái)),于10月8日至12日在迪拜世界貿(mào)易中心舉行。游客可以通過(guò)一個(gè)“沉浸式的空間”將數(shù)據(jù)可視化,讓他們了解迪拜的未來(lái)。讓參觀者可以在現(xiàn)場(chǎng)查閱觀看全市數(shù)據(jù),這意味著迪拜將成為了世界上第一個(gè)與公眾分享實(shí)時(shí)實(shí)時(shí)數(shù)據(jù)的城市,同時(shí)還可以預(yù)測(cè)未來(lái)十年的發(fā)展。
最近,很多小伙伴在后臺(tái)私信我,咨詢有沒(méi)有數(shù)據(jù)處理及可視化的相關(guān)系統(tǒng)教程?我的回復(fù)是,這些庫(kù)只是工具,無(wú)需花費(fèi)很長(zhǎng)的時(shí)間牢記這些命令的使用,學(xué)習(xí)一遍之后整理好筆記即可,遺忘之時(shí)再查找這些筆記使用即可
。
本文是博主本人結(jié)合自己的使用經(jīng)驗(yàn)以及各大博主的分享精煉匯總而成
,耗時(shí)進(jìn)半個(gè)月的時(shí)候,翻閱博客和參考資料無(wú)數(shù),最后精選了最實(shí)用、常用、好用的“Pandas、Numpy、Matplotlib”三大神兵利器的方法使用攻略。
當(dāng)某個(gè)屬性數(shù)據(jù)中存在空值(NaN),則該屬性數(shù)據(jù)類型為object,使用convert_dtypes()將Series轉(zhuǎn)換為支持的dtypes。
1.convert_dtypes()處理DataFrame類型數(shù)據(jù),示例如下:
# dataframe 變量類型自動(dòng)轉(zhuǎn)換df = pd.DataFrame( { "a": pd.Series([1, 2, 3], dtype=np.dtype("int32")), "b": pd.Series(["x", "y", "z"], dtype=np.dtype("O")), "c": pd.Series([True, False, np.nan], dtype=np.dtype("O")), "d": pd.Series(["h", "i", np.nan], dtype=np.dtype("O")), "e": pd.Series([10, np.nan, 20], dtype=np.dtype("float")), "f": pd.Series([np.nan, 100.5, 200], dtype=np.dtype("float")), })print(df.dtypes)dfn = df.convert_dtypes()print(dfn.dtypes)
2.convert_dtypes()處理Series變量類型數(shù)據(jù),示例如下:
# Series 變量類型自動(dòng)轉(zhuǎn)換s = pd.Series(["a", "b", np.nan])print(s.dtypes)sn = s.convert_dtypes()print(sn.dtypes)
pandas可通過(guò)添加顏色條件,讓表格數(shù)據(jù)凸顯出統(tǒng)計(jì)特性。
import pandas as pddf = pd.read_csv("test.csv")
1.Fare變量值呈現(xiàn)條形圖,以清楚看出各個(gè)值得大小比較,可直接使用bar
,示例如下:
df.style.bar("Fare",vmin=0)
2.讓Age變量呈現(xiàn)背景顏色的梯度變化,以體驗(yàn)映射的數(shù)值大小,那么可直接使用background_gradient
,深顏色代表數(shù)值大,淺顏色代表數(shù)值小,示例如下:
df.style.background_gradient("Greens",subset="Age")
3.讓所有缺失值都高亮出來(lái),可使用highlight_null
,示例如下:
df.style.highlight_null()
4.pandas
的style
條件格式,組合用法非常簡(jiǎn)單,示例如下:
df.style.bar("Fare",vmin=0).background_gradient("Greens",subset="Age").highlight_null()
使用pd.transform(func,axis)函數(shù):
func
是指定用于處理數(shù)據(jù)的函數(shù),它可以是普通函數(shù)
、字符串函數(shù)名稱
、函數(shù)列表
或軸標(biāo)簽映射函數(shù)的字典
。axis
是指要應(yīng)用到哪個(gè)軸,0
代表列,1
代表行。1.func=“普通函數(shù)”,示例如下:
df = pd.DataFrame({"A": [1,2,3], "B": [10,20,30] })def plus_10(x): return x+10df.transform(plus_10)# df.transform(lambda x: x+10) 等價(jià)寫法
2.func=“內(nèi)置的字符串函數(shù)”,示例如下:
df = pd.DataFrame({"A": [1,2,3], "B": [10,20,30] })df.transform("sqrt")
3.func=“多個(gè)映射函數(shù)”,示例如下:
df = pd.DataFrame({"A": [1,2,3], "B": [10,20,30] })df.transform([np.sqrt, np.exp])
4.func=“指定軸位置的映射函數(shù)”,示例如下:
df = pd.DataFrame({"A": [1,2,3], "B": [10,20,30] })df.transform({ "A": np.sqrt, "B": np.exp,})
工作中,比如用戶畫像的數(shù)據(jù)中也會(huì)遇到,客戶使用的app類型就會(huì)以這種長(zhǎng)列表的形式或者以逗號(hào)隔開(kāi)的字符串形式展現(xiàn)出來(lái)
。
1.使用explode()這個(gè)方法即可,一般我們會(huì)在后面跟一個(gè)去重的方法,explode()支持列表
、元組
、Series
和numpy
的ndarray
類型數(shù)據(jù),示例如下:
df.explode("愛(ài)好").drop_duplicates()
2.當(dāng)長(zhǎng)數(shù)據(jù)不是explode能夠處理的數(shù)據(jù)類型時(shí),使用Series.str.split()
分割字符串的方法將其轉(zhuǎn)換為列表格式后處理,然后再進(jìn)行explode即可,示例如下:
df["愛(ài)好"] = df["愛(ài)好"].str.split()
df.explode("愛(ài)好").drop_duplicates()
源數(shù)據(jù)如下:
df1 = pd.DataFrame({ "name":["A","B","C","D"], "math":[60,89,82,70], "physics":[66, 95,83,66], "chemistry":[61,91,77,70] })df2 = pd.DataFrame({ "name":["E","F","G","H"], "math":[66,95,83,66], "physics":[60, 89,82,70], "chemistry":[90,81,78,90] })
1.默認(rèn)情況下,它是沿axis=0垂直連接的,并且默認(rèn)情況下會(huì)保留df1和df2原來(lái)的索引。
pd.concat([df1,df2])
2.可以通過(guò)設(shè)置參數(shù)ignore_index=True
,這樣索引就可以從0到n-1自動(dòng)排序了。
pd.concat([df1,df2],ignore_index = True)
3.如果想要沿水平軸連接兩個(gè)DataFrame
,可以設(shè)置參數(shù)axis=1
。
pd.concat([df1,df2],axis = 1)
4.可以通過(guò)設(shè)置參數(shù)verify_integrity=True
,將此設(shè)置True
為時(shí),如果存在重復(fù)的索引,將會(huì)報(bào)錯(cuò)。
pd.concat([df1,df2], verify_integrity=True)
dataframe
都有的一個(gè)簡(jiǎn)單屬性,實(shí)現(xiàn)轉(zhuǎn)置功能。它在顯示describe
時(shí)可以很好的搭配。
boston.describe().T.head(10)
在數(shù)據(jù)探索的時(shí)候,value_counts
是使用很頻繁的函數(shù),它默認(rèn)是不統(tǒng)計(jì)空值的
,但空值往往也是我們很關(guān)心的。如果想統(tǒng)計(jì)空值,可以將參數(shù)dropna
設(shè)置為False
。
ames_housing = pd.read_csv("data/train.csv")print(ames_housing["FireplaceQu"].value_counts(dropna=False, normalize=True))
異常值檢測(cè)是數(shù)據(jù)分析中常見(jiàn)的操作。使用clip
函數(shù)可以很容易地找到變量范圍之外的異常值,并替換它們。
age.clip(50, 60)
源數(shù)據(jù)如下:
1.直接在dataframe的[]
中寫篩選的條件或者組合條件,示例如下:
# 篩選出大于NOX這變量平均值的所有數(shù)據(jù),然后按NOX降序排序。df[df["NOX"]>df["NOX"].mean()].sort_values(by="NOX",ascending=False).head()
#篩選出大于NOX這變量平均值且CHAS屬性值=1的所有數(shù)據(jù),然后按NOX降序排序。df[(df["NOX"]>df["NOX"].mean())& (df["CHAS"] ==1)].sort_values(by="NOX",ascending=False).head()
2.loc
按標(biāo)簽值(列名和行索引取值)訪問(wèn),iloc
按數(shù)字索引訪問(wèn),均支持單值訪問(wèn)或切片查詢,loc
還可以指定返回的列變量,示例如下:
# 按df["NOX"]>df["NOX"].mean()條件篩選出數(shù)據(jù),并篩選出指定CHAS變量,然后賦值=2df.loc[(df["NOX"]>df["NOX"].mean()),["CHAS"]] = 2
3.需要鎖定某些具體的值的,這時(shí)候就需要isin
了。比如我們要限定NOX
取值只能為0.538,0.713,0.437
中時(shí),示例如下:
df.loc[df["NOX"].isin([0.538,0.713,0.437]),:].sample(5)
# 也可以做取反操作,在篩選條件前加`~`符號(hào)df.loc[~df["NOX"].isin([0.538,0.713,0.437]),:].sample(5)
4.pandas
里實(shí)現(xiàn)字符串的模糊篩選,可以用.str.contains()
來(lái)實(shí)現(xiàn),示例如下:
train.loc[train["Name"].str.contains("Mrs|Lily"),:].head()
merge():對(duì)于擁有相同的鍵的兩個(gè)DataFrame對(duì)象,需要將其進(jìn)行有效的拼接,整合到一個(gè)對(duì)象。
def merge(left, right, how="inner", on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=("_x", "_y"), copy=True, indicator=False, validate=None)
主要參數(shù)介紹:
連接方式
,inner或outer,默認(rèn)是outer
;指定用于連接的鍵,必須存在于左右兩個(gè)DataFrame中
;使用左側(cè)DataFrame的行索引作為連接鍵(配合right_on)
;對(duì)其按照連接鍵進(jìn)行排序
;源數(shù)據(jù)為:
df1 = pd.DataFrame(np.random.randint(10, size=(3, 3)), columns=["A", "B", "C"])df2 = pd.DataFrame(np.random.randint(10, size=(2, 2)), columns=["A", "B"])
pd.merge(df1, df2, how="outer", on="B")
pd.merge(df1, df2, how="outer", left_on="B", right_on="A")
1.drop_duplicates():刪除對(duì)象dataframe中重復(fù)的行,重復(fù)通過(guò)參數(shù)subset
指定。
def drop_duplicates(subset=None, keep="first", inplace=False, ignore_index=False)
主要參數(shù)介紹:
默認(rèn)為所有的列(即每行全部相同)
;刪除重復(fù)項(xiàng)
,除了第1個(gè)(first)或者最后一個(gè)(last);df1 = pd.DataFrame(np.random.randint(10, size=(3, 3)), columns=["A", "B", "C"])df1.drop_duplicates("A")
2.unique():相比于drop_duplicates方法,unique()只針對(duì)于Series對(duì)象,類似于Set。 通常是對(duì)dataframe中提取某一鍵,變成Series,再去重,統(tǒng)計(jì)個(gè)數(shù)。
print(len(df1["A"].unique().tolist()))
sort_values():按照某個(gè)鍵進(jìn)行排序。 查看相同鍵時(shí)行的某些變化,如例子中在A相同時(shí)B、C的變化。
def sort_values(by, axis=0, ascending=True, kind="quicksort", na_position="last", ignore_index=False)
主要參數(shù)介紹:
指定按照哪個(gè)鍵/索引進(jìn)行排序;
默認(rèn)為升序;
指定排序方法
,‘quicksort’, ‘mergesort’, ‘heapsort;df1.sort_values(by="A")
sample():對(duì)對(duì)象進(jìn)行采樣。 當(dāng)dataframe對(duì)象數(shù)據(jù)量太大,導(dǎo)致做實(shí)驗(yàn)過(guò)滿時(shí),可以抽取一部分進(jìn)行實(shí)驗(yàn),提高效率。
def sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
主要參數(shù)介紹:
允許或不允許對(duì)同一行進(jìn)行多次采樣;
采樣的權(quán)重,默認(rèn)為“None”將導(dǎo)致相同的概率權(quán)重;
指定采樣的軸,默認(rèn)為行;
df1.sample(n=3)
df1.sample(frac=0.1)
1.isna():isna方法返回一個(gè)布爾對(duì)象,每個(gè)元素是否為NaN。
df1.isna()
2.isnull():當(dāng)數(shù)據(jù)量很大時(shí),上述很難觀察到某列是否存在缺失,此時(shí)可以用isnull()
方法 。
df1.isnull().all() # 某列是否全部為NaN df1.isnull().any() # 某列是否出現(xiàn)NaN
3.dropna():dropna方法刪除含缺失值的行或列。
def dropna(axis=0, how="any", thresh=None, subset=None, inplace=False)
主要參數(shù)介紹:
參數(shù)為any時(shí),行或列(axis決定)出現(xiàn)NaN時(shí),就進(jìn)行刪除;為all時(shí),行或列全為NaN時(shí)才進(jìn)行刪除
;文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/119548.html
摘要:請(qǐng)回復(fù)這個(gè)帖子并注明組織個(gè)人信息來(lái)申請(qǐng)加入。權(quán)限分配靈活,能者居之。數(shù)量超過(guò)個(gè),在所有組織中排名前。網(wǎng)站日超過(guò),排名的峰值為。導(dǎo)航歸檔社區(qū)自媒體平臺(tái)微博知乎專欄公眾號(hào)博客園簡(jiǎn)書合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...
摘要:主頁(yè)暫時(shí)下線社區(qū)暫時(shí)下線知識(shí)庫(kù)自媒體平臺(tái)微博知乎簡(jiǎn)書博客園合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到特色項(xiàng)目中文文檔和教程與機(jī)器學(xué)習(xí)實(shí)用指南人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)科學(xué)比賽系列項(xiàng)目實(shí)戰(zhàn)教程文檔代碼視頻數(shù)據(jù)科學(xué)比賽收集平臺(tái),,劍指,經(jīng)典算法實(shí)現(xiàn)系列課本課本描述 【主頁(yè)】 apachecn.org 【Github】@ApacheCN 暫時(shí)下線: 社區(qū) 暫時(shí)下線: cwiki 知識(shí)庫(kù) 自媒體平臺(tái) ...
摘要:主頁(yè)暫時(shí)下線社區(qū)暫時(shí)下線知識(shí)庫(kù)自媒體平臺(tái)微博知乎簡(jiǎn)書博客園合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到特色項(xiàng)目中文文檔和教程與機(jī)器學(xué)習(xí)實(shí)用指南人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)科學(xué)比賽系列項(xiàng)目實(shí)戰(zhàn)教程文檔代碼視頻數(shù)據(jù)科學(xué)比賽收集平臺(tái),,劍指,經(jīng)典算法實(shí)現(xiàn)系列課本課本描述 【主頁(yè)】 apachecn.org 【Github】@ApacheCN 暫時(shí)下線: 社區(qū) 暫時(shí)下線: cwiki 知識(shí)庫(kù) 自媒體平臺(tái) ...
摘要:我們是一個(gè)大型開(kāi)源社區(qū),旗下群共余人,數(shù)量超過(guò)個(gè),網(wǎng)站日超過(guò),擁有博客專家和簡(jiǎn)書程序員優(yōu)秀作者認(rèn)證。我們組織公益性的翻譯活動(dòng)學(xué)習(xí)活動(dòng)和比賽組隊(duì)活動(dòng),并和等國(guó)內(nèi)著名開(kāi)源組織保持良好的合作關(guān)系。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 我們是一個(gè)...
閱讀 2986·2021-11-16 11:45
閱讀 5176·2021-09-22 10:57
閱讀 1773·2021-09-08 09:36
閱讀 1596·2021-09-02 15:40
閱讀 2514·2021-07-26 23:38
閱讀 1199·2019-08-30 15:55
閱讀 929·2019-08-30 15:54
閱讀 1217·2019-08-29 14:06