在 pandas 中,存儲(chǔ)文本主要有兩種方式
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)負(fù)責(zé)任的成都網(wǎng)站制作公司!
但一般建議使用 StringDtype 類型存儲(chǔ)文本數(shù)據(jù)。都是由于各種原因,現(xiàn)在字符串?dāng)?shù)據(jù)的默認(rèn)存儲(chǔ)類型還是 object 。
要存儲(chǔ)為 string 類型,需要顯式的設(shè)置 dtype 參數(shù)
或者在創(chuàng)建 Series 或 DataFrame 之后,使用 astype 轉(zhuǎn)換類型
也可以使用 StringDtype/"string" 轉(zhuǎn)換其他非字符串類型的數(shù)據(jù)
轉(zhuǎn)換現(xiàn)有數(shù)據(jù)的類型
StringDtype 類型對(duì)象與 object 類型之間存在一些差異
兩個(gè)結(jié)果的輸出都是 Int64 類型。將其與 object 類型比較
當(dāng)存在 NA 值時(shí),輸出為 float64 。類似地,對(duì)于返回布爾值的方法
Series 和 Index 有一套字符串處理方法,可以方便地對(duì)數(shù)組的每個(gè)元素進(jìn)行操作,最重要的是,這些方法會(huì)自動(dòng)忽略缺失值。
這些方法可以通過 str 屬性訪問,通常具有與內(nèi)置字符串方法相匹配的名稱
Index 上的字符串方法對(duì)于清理或轉(zhuǎn)換 DataFrame 的列特別有用。
例如,您可能有帶有前導(dǎo)或后置空格的列
因?yàn)? df.columns 是一個(gè) Index 對(duì)象,所以我們可以使用 .str 訪問器
我們可以根據(jù)需要對(duì)列名進(jìn)行處理,然后重新設(shè)置列名。
例如,我們刪除列名的前后空格,并將其改為小寫字母,同時(shí)用 _ 替換剩余的空格
split 方法會(huì)返回一個(gè)值為 list 的 Series
可以使用 get 或 [] 訪問拆分后的列表中的元素
更簡單的方法是設(shè)置 expand 參數(shù),返回一個(gè) DataFrame
當(dāng)原來的 Series 包含 StringDtype 類型的數(shù)據(jù)時(shí),輸出列也將全部為 StringDtype
當(dāng)然,也可以設(shè)置切割次數(shù)
它還有個(gè)對(duì)應(yīng)的 rsplit 方法,從右邊起始對(duì)字符串進(jìn)行拆分
replace 參數(shù)支持使用正則表達(dá)式,前兩個(gè)參數(shù)是 pat (匹配模式) 和 repl (替換字符串)
如果只是想要替換字符串字面值,可以將 regex 參數(shù)設(shè)置為 False ,而不需要對(duì)每個(gè)特殊字符進(jìn)行轉(zhuǎn)義。此時(shí) pat 和 repl 參數(shù)必須是字符串
此外, replace 方法還接受一個(gè)可調(diào)用的替換函數(shù),會(huì)使用 re.sub() 方法在每個(gè)匹配的模式上調(diào)用該函數(shù)
該函數(shù)需要傳入一個(gè)正則對(duì)象作為位置參數(shù),并返回一個(gè)字符串。例如
replace 方法的 pat 參數(shù)還接受 re.compile() 編譯的正則表達(dá)式對(duì)象。所有的 flags 需要在編譯正則對(duì)象時(shí)設(shè)置
如果在 replace 中設(shè)置 flags 參數(shù),則會(huì)拋出異常
有幾種方法可以將一個(gè) Series 或 Index 與自己或其他的 Series 或 Index 相連接,所有這些方法都是基于 cat() 方法
可以連接一個(gè) Series 或 Index 的內(nèi)容
如果未指定 sep 參數(shù),則默認(rèn)為空字符串
默認(rèn)會(huì)跳過缺失值,也可以使用 na_rep 指定缺失值的表示方式
cat() 的第一個(gè)參數(shù) others 可以是類似列表的對(duì)象,但是其長度需要和調(diào)用對(duì)象一致
只要兩個(gè)對(duì)象中存在缺失值,對(duì)應(yīng)的結(jié)果中也是缺失值,除非指定了 na_rep
others 參數(shù)也可以是二維的,但是得保證其行數(shù)必須與調(diào)用的對(duì)象一致
對(duì)于 Series 或 DataFrame 的連接,可以通過設(shè)置 join 參數(shù)指定對(duì)齊方式
通常 join 可選范圍為: 'left' , 'outer' , 'inner' , 'right' 。此時(shí),不再要求兩個(gè)對(duì)象長度一致
當(dāng) others 參數(shù)是 DataFrame 時(shí),也可以使用
可以將一些類似數(shù)組的對(duì)象(如 Series , Index 等)放在一個(gè)類似列表的容器中,然后傳遞給 cat
對(duì)于沒有索引的對(duì)象,其長度必須與調(diào)用 cat 的對(duì)象相同。但是 Series 和 Index 可以是任意的,除非設(shè)置了 json=None 。
如果在 others 參數(shù)上包含不同索引的對(duì)象,且設(shè)置了 join='right' ,則最后的結(jié)果將會(huì)是這些索引的并集
這是math模塊的一個(gè)函數(shù)
pow() 源于英文power,返回給定數(shù)字的乘冪
所以我們執(zhí)行math.pow()示例:
注意:math 模塊則會(huì)把參數(shù)轉(zhuǎn)換為 float。
math是非常常用的數(shù)學(xué)計(jì)算包,其中math.pow()語法如下
參數(shù)說明:
等同于寫法
但注意math函數(shù)返回的是浮點(diǎn)數(shù),后者可能返回整數(shù)
其他常用的數(shù)學(xué)函數(shù)有:
python2 有cmp(x,y)函數(shù),python3移除了cmp,新增了 operator模塊,提供了如下比較方法
作為比較函數(shù)
在處理數(shù)字時(shí)使用數(shù)學(xué)函數(shù)能更高效的獲取計(jì)算結(jié)果。
對(duì)基礎(chǔ)運(yùn)行環(huán)境有疑問的,推薦參考: python函數(shù)深入淺出 0.基礎(chǔ)篇
可以使用 [] 符號(hào)直接按位置進(jìn)行索引,如果索引超過字符串的長度,結(jié)果將是 NaN
在 0.23 版本之前, extract 方法的參數(shù) expand 默認(rèn)為 False 。當(dāng) expand=False 時(shí), expand 會(huì)根據(jù)正則表達(dá)式模式返回一個(gè) Series 、 Index 或 DataFrame
當(dāng) expand=True 時(shí),它總是返回一個(gè) DataFrame ,這種方式更加符合用戶的需求,從 0.23.0 版本開始就是默認(rèn)的
extract 方法接受一個(gè)至少包含一個(gè)捕獲組的正則表達(dá)式
如果是包含多個(gè)組的正則表達(dá)式將返回一個(gè) DataFrame ,每個(gè)捕獲組是一列
未匹配的行會(huì)填充 NaN ,可以從混亂的字符串序列中提取出有規(guī)則的信息。
對(duì)于命名分組
對(duì)于可選的分組
注意 :正則表達(dá)式中的任何捕獲組名稱都將用作列名,否則將使用捕獲組號(hào)
如果 expand=True ,則返回一個(gè) DataFrame
如果 expand=False ,則返回一個(gè) Series
對(duì)于索引,如果 expand=True ,且只有一個(gè)捕獲組則返回一個(gè)只有一列的 DataFrame
此時(shí),如果 expand=False 將會(huì)返回一個(gè) Index
對(duì)于索引,正則表達(dá)式設(shè)置多個(gè)分組將返回 DataFrame
如果 expand=False 將會(huì)拋出 ValueError 異常
對(duì)于 extract 只返回第一個(gè)匹配項(xiàng)
與 extract 不同, extractall 方法返回每個(gè)匹配項(xiàng),其結(jié)果始終是具有 MultiIndex 的 DataFrame 。
MultiIndex 的最后一級(jí)名為 match ,標(biāo)示的是匹配的順序
對(duì)于只有一個(gè)匹配的 Series
extractall(pat).xs(0, level='match') 與 extract(pat) 的結(jié)果一致
Index 也支持 .str.extractall ,它返回一個(gè) DataFrame ,其結(jié)果與 Series.str 相同。
您可以檢查字符串元素中是否包含正則匹配模式
或者字符串元素是否與模式匹配
而在 1.1.0 版本中
注意 :
match 、 fullmatch 和 contains 之間的區(qū)別是:
這三個(gè)函數(shù)于 re 模塊的 re.fullmatch 、 re.match 和 re.search 對(duì)應(yīng)
像 match , fullmatch , contains , startswith 和 endswith 有一個(gè)額外的 na 參數(shù),用于將缺失值替換為 True 或 False
您可以從字符串列中提取指標(biāo)變量。例如,如果使用 '|' 分隔的字符串
字符串 Index 也支持 get_dummies ,它返回一個(gè) MultiIndex
對(duì)于氣象繪圖來講,第一步是對(duì)數(shù)據(jù)的處理,通過各類公式,或者統(tǒng)計(jì)方法將原始數(shù)據(jù)處理為目標(biāo)數(shù)據(jù)。
按照氣象統(tǒng)計(jì)課程的內(nèi)容,我給出了一些常用到的統(tǒng)計(jì)方法的對(duì)應(yīng)函數(shù):
在計(jì)算氣候態(tài),區(qū)域平均時(shí)均要使用到求均值函數(shù),對(duì)應(yīng)NCL中的dim_average函數(shù),在python中通常使用np.mean()函數(shù)
numpy.mean(a, axis, dtype)
假設(shè)a為[time,lat,lon]的數(shù)據(jù),那么
需要特別注意的是,氣象數(shù)據(jù)中常有缺測,在NCL中,使用求均值函數(shù)會(huì)自動(dòng)略過,而在python中,當(dāng)任意一數(shù)與缺測(np.nan)計(jì)算的結(jié)果均為np.nan,比如求[1,2,3,4,np.nan]的平均值,結(jié)果為np.nan
因此,當(dāng)數(shù)據(jù)存在缺測數(shù)據(jù)時(shí),通常使用np.nanmean()函數(shù),用法同上,此時(shí)[1,2,3,4,np.nan]的平均值為(1+2+3+4)/4 = 2.5
同樣的,求某數(shù)組最大最小值時(shí)也有np.nanmax(), np.nanmin()函數(shù)來補(bǔ)充np.max(), np.min()的不足。
其他很多np的計(jì)算函數(shù)也可以通過在前邊加‘nan’來使用。
另外,
也可以直接將a中缺失值全部填充為0。
np.std(a, axis, dtype)
用法同np.mean()
在NCL中有直接求數(shù)據(jù)標(biāo)準(zhǔn)化的函數(shù)dim_standardize()
其實(shí)也就是一行的事,根據(jù)需要指定維度即可。
皮爾遜相關(guān)系數(shù):
相關(guān)可以說是氣象科研中最常用的方法之一了,numpy函數(shù)中的np.corrcoef(x, y)就可以實(shí)現(xiàn)相關(guān)計(jì)算。但是在這里我推薦scipy.stats中的函數(shù)來計(jì)算相關(guān)系數(shù):
這個(gè)函數(shù)缺點(diǎn)和有點(diǎn)都很明顯,優(yōu)點(diǎn)是可以直接返回相關(guān)系數(shù)R及其P值,這避免了我們進(jìn)一步計(jì)算置信度。而缺點(diǎn)則是該函數(shù)只支持兩個(gè)一維數(shù)組的計(jì)算,也就是說當(dāng)我們需要計(jì)算一個(gè)場和一個(gè)序列的相關(guān)時(shí),我們需要循環(huán)來實(shí)現(xiàn)。
其中a[time,lat,lon],b[time]
(NCL中為regcoef()函數(shù))
同樣推薦Scipy庫中的stats.linregress(x,y)函數(shù):
slop: 回歸斜率
intercept:回歸截距
r_value: 相關(guān)系數(shù)
p_value: P值
std_err: 估計(jì)標(biāo)準(zhǔn)誤差
直接可以輸出P值,同樣省去了做置信度檢驗(yàn)的過程,遺憾的是仍需同相關(guān)系數(shù)一樣循環(huán)計(jì)算。