歡迎你來到站長在線的站長學(xué)堂學(xué)習(xí)Python知識,本文學(xué)習(xí)的是《Python中集合的交集、并集、差集和對稱差集運(yùn)算方法詳解》。主要講的是集合運(yùn)算的相關(guān)的概念,及運(yùn)算方法,包括:集合的交集、集合的并集、集合的差集、集合的對稱差集、集合的交集運(yùn)算方法、集合的并集運(yùn)算方法、集合的差集運(yùn)算方法、集合的對稱差集運(yùn)算方法。
創(chuàng)新互聯(lián)建站是一家專注于做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計,壽寧網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:壽寧等地區(qū)。壽寧做網(wǎng)站價格咨詢:028-86922220
在Python中,集合最常用的操作就是進(jìn)行交集、并集、差集和對稱差集的運(yùn)算。
要想學(xué)習(xí)集合的交集、并集、差集和對稱差集運(yùn)算方法,首先我們來了解這些名詞的含義:
設(shè)A、B兩個集合,由所有屬于集合A且屬于集合B的元素所組成的集合,叫做集合A與集合B的交集。在Python中,進(jìn)行交集運(yùn)算時使用“”符號。
給定兩個集合A、B,把他們所有的元素合并在一起組成的集合,叫做集合A與集合B的并集。在Python中,進(jìn)行并集運(yùn)算時使用“|”符號。
設(shè)A,B是兩個集合,則所有屬于A且不屬于B的元素構(gòu)成的集合,叫做集合A與集合B的差集。在Python中,進(jìn)行差集運(yùn)算時使用“-”符號。
對稱差集也稱為對稱差分或者補(bǔ)集,設(shè)A,B是兩個集合,所有不相同的集合,叫做集合A與集合B的對稱差集(對稱差分或者補(bǔ)集)。在Python中,進(jìn)行對稱差集運(yùn)算時使用“^”符號。
上面都是概念性的描述,下面站長在線來舉實(shí)際的場景來對交集、并集、差集和對稱差集運(yùn)算方法進(jìn)行深入淺出的解讀。
場景模擬:某高中三年級,文科班高考的科目是語文、數(shù)學(xué)、英語、政治、 歷史 和地理。理科班高考的科目是語文、數(shù)學(xué)、英語、物理、化學(xué)和生物。
設(shè)定集合A為文科班高考的科目,集合B為理科班高考的科目。
A = {'語文','數(shù)學(xué)','英語','政治',' 歷史 ','地理'}
B = {'語文','數(shù)學(xué)','英語','物理','化學(xué)','生物'}
我們使用集合的交集運(yùn)算的時候可以采用兩種方式,一種是使用“”運(yùn)算符進(jìn)行操作,另一種是使用 intersection() 方法來實(shí)現(xiàn)。
運(yùn)行結(jié)果:
運(yùn)行結(jié)果:
同理集合B和集合A的交集也是一樣。我這里就不重復(fù)了,自己去體驗(yàn)一下。
集合的并集運(yùn)算也有兩種方式,一種是使用“|”運(yùn)算符進(jìn)行操作,另一種是使用union()方法來實(shí)現(xiàn)。
運(yùn)行結(jié)果如下:
運(yùn)行結(jié)果為:
同理集合B和集合A的并集也是一樣。自己去體驗(yàn)一下吧!
集合的差集運(yùn)算也有兩種方式,一種是使用“-”運(yùn)算符進(jìn)行操作,另一種是使用difference()方法來實(shí)現(xiàn)。
運(yùn)行結(jié)果為:
上面是集合A和集合B的差集,但是集合B和集合A的差集就不是一樣的了哦!
運(yùn)行結(jié)果為:
從上面可以看出,集合A和集合B的差集 與 集合B和集合A的差集是不一樣的,(A - B)是A中存在的部分,(B - A)是B中存在的部分。
運(yùn)行結(jié)果:
同理,使用difference()方法進(jìn)行集合B和集合A的差集也是不同的
運(yùn)行結(jié)果:
集合的差集運(yùn)算也有兩種方式,一種是使用“^”運(yùn)算符進(jìn)行操作,另一種是使用symmetric_difference()方法來實(shí)現(xiàn)。
運(yùn)行結(jié)果為:
運(yùn)行結(jié)果為:
同樣的,集合B與集合A的對稱差集也是一樣,自己去體驗(yàn)一下。
我們對集合的交集、并集、差集和對稱差集運(yùn)算方法全部詳細(xì)的講解了一遍,通過運(yùn)行結(jié)果,我們得出結(jié)論:
集合中進(jìn)行交集、并集、對稱差集進(jìn)行運(yùn)算的時候,集合A與集合B,位置替換的時候,結(jié)果相同。
集合中進(jìn)行差集運(yùn)算的時候,集合A與集合B,位置替換的時候,結(jié)果不同,為前面那個集合獨(dú)立存在的部分。
到此為止,本節(jié)課的內(nèi)容《Python中集合的交集、并集、差集和對稱差集運(yùn)算方法詳解》就完全講完了,主要講的集合運(yùn)算的相關(guān)的概念,及運(yùn)算方法,包括:集合的交集、集合的并集、集合的差集、集合的對稱差集、集合的交集運(yùn)算方法、集合的并集運(yùn)算方法、集合的差集運(yùn)算方法、集合的對稱差集運(yùn)算方法。
在Python中,pandas是基于NumPy數(shù)組構(gòu)建的,使數(shù)據(jù)預(yù)處理、清洗、分析工作變得更快更簡單。pandas是專門為處理表格和混雜數(shù)據(jù)設(shè)計的,而NumPy更適合處理統(tǒng)一的數(shù)值數(shù)組數(shù)據(jù)。
使用下面格式約定,引入pandas包:
pandas有兩個主要數(shù)據(jù)結(jié)構(gòu):Series和DataFrame。
Series是一種類似于一維數(shù)組的對象,它由 一組數(shù)據(jù) (各種NumPy數(shù)據(jù)類型)以及一組與之相關(guān)的 數(shù)據(jù)標(biāo)簽(即索引) 組成,即index和values兩部分,可以通過索引的方式選取Series中的單個或一組值。
pd.Series(list,index=[ ]) ,第二個參數(shù)是Series中數(shù)據(jù)的索引,可以省略。
Series類型索引、切片、運(yùn)算的操作類似于ndarray,同樣的類似Python字典類型的操作,包括保留字in操作、使用.get()方法。
Series和ndarray之間的主要區(qū)別在于Series之間的操作會根據(jù)索引自動對齊數(shù)據(jù)。
DataFrame是一個表格型的數(shù)據(jù)類型,每列值類型可以不同,是最常用的pandas對象。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。DataFrame中的數(shù)據(jù)是以一個或多個二維塊存放的(而不是列表、字典或別的一維數(shù)據(jù)結(jié)構(gòu))。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index為指定的列、行索引,并按照順序排列。
如果創(chuàng)建時指定了columns和index索引,則按照索引順序排列,并且如果傳入的列在數(shù)據(jù)中找不到,就會在結(jié)果中產(chǎn)生缺失值:
數(shù)據(jù)索引 :Series和DataFrame的索引是Index類型,Index對象是不可修改,可通過索引值或索引標(biāo)簽獲取目標(biāo)數(shù)據(jù),也可通過索引使序列或數(shù)據(jù)框的計算、操作實(shí)現(xiàn)自動化對齊。索引類型index的常用方法:
重新索引 :能夠改變、重排Series和DataFrame索引,會創(chuàng)建一個新對象,如果某個索引值當(dāng)前不存在,就引入缺失值。
df.reindex(index, columns ,fill_value, method, limit, copy ) :index/columns為新的行列自定義索引;fill_value為用于填充缺失位置的值;method為填充方法,ffill當(dāng)前值向前填充,bfill向后填充;limit為最大填充量;copy 默認(rèn)True,生成新的對象,F(xiàn)alse時,新舊相等不復(fù)制。
刪除指定索引 :默認(rèn)返回的是一個新對象。
.drop() :能夠刪除Series和DataFrame指定行或列索引。
刪除一行或者一列時,用單引號指定索引,刪除多行時用列表指定索引。
如果刪除的是列索引,需要增加axis=1或axis='columns'作為參數(shù)。
增加inplace=True作為參數(shù),可以就地修改對象,不會返回新的對象。
在pandas中,有多個方法可以選取和重新組合數(shù)據(jù)。對于DataFrame,表5-4進(jìn)行了總結(jié)
適用于Series和DataFrame的基本統(tǒng)計分析函數(shù) :傳入axis='columns'或axis=1將會按行進(jìn)行運(yùn)算。
.describe() :針對各列的多個統(tǒng)計匯總,用統(tǒng)計學(xué)指標(biāo)快速描述數(shù)據(jù)的概要。
.sum() :計算各列數(shù)據(jù)的和
.count() :非NaN值的數(shù)量
.mean( )/.median() :計算數(shù)據(jù)的算術(shù)平均值、算術(shù)中位數(shù)
.var()/.std() :計算數(shù)據(jù)的方差、標(biāo)準(zhǔn)差
.corr()/.cov() :計算相關(guān)系數(shù)矩陣、協(xié)方差矩陣,是通過參數(shù)對計算出來的。Series的corr方法用于計算兩個Series中重疊的、非NA的、按索引對齊的值的相關(guān)系數(shù)。DataFrame的corr和cov方法將以DataFrame的形式分別返回完整的相關(guān)系數(shù)或協(xié)方差矩陣。
.corrwith() :利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關(guān)系數(shù)。傳入一個Series將會返回一個相關(guān)系數(shù)值Series(針對各列進(jìn)行計算),傳入一個DataFrame則會計算按列名配對的相關(guān)系數(shù)。
.min()/.max() :計算數(shù)據(jù)的最小值、最大值
.diff() :計算一階差分,對時間序列很有效
.mode() :計算眾數(shù),返回頻數(shù)最高的那(幾)個
.mean() :計算均值
.quantile() :計算分位數(shù)(0到1)
.isin() :用于判斷矢量化集合的成員資格,可用于過濾Series中或DataFrame列中數(shù)據(jù)的子集
適用于Series的基本統(tǒng)計分析函數(shù),DataFrame[列名]返回的是一個Series類型。
.unique() :返回一個Series中的唯一值組成的數(shù)組。
.value_counts() :計算一個Series中各值出現(xiàn)的頻率。
.argmin()/.argmax() :計算數(shù)據(jù)最大值、最小值所在位置的索引位置(自動索引)
.idxmin()/.idxmax() :計算數(shù)據(jù)最大值、最小值所在位置的索引(自定義索引)
pandas提供了一些用于將表格型數(shù)據(jù)讀取為DataFrame對象的函數(shù)。下表對它們進(jìn)行了總結(jié),其中read_csv()、read_table()、to_csv()是用得最多的。
在數(shù)據(jù)分析和建模的過程中,相當(dāng)多的時間要用在數(shù)據(jù)準(zhǔn)備上:加載、清理、轉(zhuǎn)換以及重塑。
在許多數(shù)據(jù)分析工作中,缺失數(shù)據(jù)是經(jīng)常發(fā)生的。對于數(shù)值數(shù)據(jù),pandas使用浮點(diǎn)值NaN(np.nan)表示缺失數(shù)據(jù),也可將缺失值表示為NA(Python內(nèi)置的None值)。
替換值
.replace(old, new) :用新的數(shù)據(jù)替換老的數(shù)據(jù),如果希望一次性替換多個值,old和new可以是列表。默認(rèn)會返回一個新的對象,傳入inplace=True可以對現(xiàn)有對象進(jìn)行就地修改。
刪除重復(fù)數(shù)據(jù)
利用函數(shù)或字典進(jìn)行數(shù)據(jù)轉(zhuǎn)換
df.head():查詢數(shù)據(jù)的前五行
df.tail():查詢數(shù)據(jù)的末尾5行
pandas.cut()
pandas.qcut() 基于分位數(shù)的離散化函數(shù)?;谥然蚧跇颖痉治粩?shù)將變量離散化為等大小桶。
pandas.date_range() 返回一個時間索引
df.apply() 沿相應(yīng)軸應(yīng)用函數(shù)
Series.value_counts() 返回不同數(shù)據(jù)的計數(shù)值
df.aggregate()
df.reset_index() 重新設(shè)置index,參數(shù)drop = True時會丟棄原來的索引,設(shè)置新的從0開始的索引。常與groupby()一起用
numpy.zeros()
處理過與時間有關(guān)的數(shù)據(jù)的人都知道,差分變化經(jīng)常用來使得結(jié)果更加直觀。在這篇文章里將會教你如何用Python來實(shí)現(xiàn)這一目的,讀完這篇文章,你將會掌握以下技能:
1、知道什么是差分變換以及滯后差分和差分階數(shù)的設(shè)置
2、如何手動計算差分
3、怎樣使用Pandas內(nèi)置的差分函數(shù)
所以,讓我們趕緊開始吧!
為什么要對時間序列數(shù)據(jù)進(jìn)行差分?
首先來看下為什么要對數(shù)據(jù)進(jìn)行差分變化,差分變化可以消除數(shù)據(jù)對時間的依賴性,也就是降低時間對數(shù)據(jù)的影響,這些影響通常包括數(shù)據(jù)的變化趨勢以及數(shù)據(jù)周期性變化的規(guī)律。進(jìn)行差分操作時,一般用現(xiàn)在的觀測值減去上個時刻的值就得到差分結(jié)果,就是這么簡單,按照這種定義可以計算一系列的差分變換。
滯后差分
連續(xù)觀測值之間的差分變換叫做一階滯后差分。滯后差分的步長需要根據(jù)數(shù)據(jù)的時間結(jié)構(gòu)做調(diào)整,例如對于周期性變化的數(shù)據(jù),這個時間步長就是數(shù)據(jù)變化的周期。
差分階數(shù)
在進(jìn)行一次差分之后,時間項的作用并沒有完全去掉,將會繼續(xù)對差分結(jié)果進(jìn)行差分變化,直到完全消除時間項的影響因素為止,這個過程中進(jìn)行的差分操作次數(shù)就稱為差分階數(shù)。
洗發(fā)水銷售數(shù)據(jù)
這份數(shù)據(jù)是三年來每月洗發(fā)水的銷售情況,總共有36個數(shù)據(jù)記錄,原始數(shù)據(jù)來自Makridakis, Wheelwright和 Hyndman (1998).,可以從下面的地址下到數(shù)據(jù):
下面的代碼將會導(dǎo)入數(shù)據(jù)并將結(jié)果畫成折線圖,如下所示:
手動差分
在這一部分中,我們將會自定義一個函數(shù)來實(shí)現(xiàn)差分變換,這個函數(shù)將會對提供的數(shù)據(jù)進(jìn)行遍歷并根據(jù)指定的時間間隔進(jìn)行差分變換。具體代碼如下:
從上面的代碼中可以看到該函數(shù)將會根據(jù)指定的時間間隔來對數(shù)據(jù)進(jìn)行變換,一般來說,通常會計算間隔一個數(shù)據(jù)的差分,這樣的結(jié)果比較可靠。當(dāng)然,我們也可以將上面的函數(shù)進(jìn)行一定的改進(jìn),加入差分階數(shù)的指定。
下面將這函數(shù)應(yīng)用到上面洗發(fā)水銷售的數(shù)據(jù)中去,運(yùn)行之后繪出下面的圖,具體如下:
自動差分
Pandas庫里提供了一個函數(shù)可以自動計算數(shù)據(jù)的差分,這個函數(shù)是diff(),輸入的數(shù)據(jù)是“series'或”DataFrame'類型的,像前面自定義函數(shù)那樣,我們也可以指定差分的時間間隔,不過在這里這個參數(shù)叫做周期。
下面的例子是用Pandas內(nèi)置函數(shù)來計算差分的,數(shù)據(jù)類型是series的,使用Pandas內(nèi)置函數(shù)的好處是代碼工作量減少了不少,而且繪出的圖中包含更詳細(xì)的信息,具體效果如下:
總結(jié)
讀完本文想必你已經(jīng)學(xué)會用python來實(shí)現(xiàn)對數(shù)據(jù)的差分了,尤其是對差分的概念,手動差分,以及使用Pandas內(nèi)置函數(shù)進(jìn)行差分都有所了解了。如果有什么好的想法歡迎在評論欄里留下。