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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Panda处理文本和时序数据?首选向量化

發布時間:2023/12/2 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Panda处理文本和时序数据?首选向量化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

Pandas作為Python數據分析的首選框架,不僅功能強大接口豐富,而且執行效率也相比原生Python要快的多,這是得益于Pandas底層由C實現,同時其向量化執行方式也非常利于并行計算。更重要的是,這種向量化操作不僅適用于數值計算,對于文本和時間格式也有著良好的支持,而這就不得不從Pandas的屬性接口談起。

?

?

說起Pandas中的屬性接口,首先要從數據類型談起。在任何一門編程語言中,雖然各自的數據類型有很多,比如數值型有int、long、double,字符串有str或者char類型,還有時間數據類型以及布爾數據類型等,可以說這數值型、字符串型、時間型以及布爾型基本覆蓋了所有基本的數據類型。而像其他的數組、列表、字典等則都是集合類的數據結構,不屬于基本數據類型。

數值型操作是所有數據處理的主體,支持程度自不必說,布爾型數據在Pandas中其實也有較好的體現,即通過&、|、~三種位運算符也相當于是實現了向量化的并行操作,那么對于字符串和時間格式呢?其實這就是本文今天要分享的重點內容:屬性接口——str、dt,兩類接口均用幾個小例子簡單粗暴的進行示范,即學即用!

嚴格意義上講,Pandas中的屬性接口除了str和dt外,還有枚舉類型cat接口,但其實用法很小眾,所以本文不予提及。

01 字符串接口——str

在Pandas中,當一列數據類型均為字符串類型時,則可對該列執行屬性接口操作,即通過調用.str屬性可調用一系列的字符串方法函數,其中這里的字符串方法不僅涵蓋了Python中內置的字符串通用方法,比如split、strim等,還實現了正則表達式的絕大部分功能,包括查找、匹配和替換等、這對于Pandas處理文本數據來說簡直是開掛一般的存在。

舉個例子,例如構造如下虛擬DataFrame數據,其中所有列都用到了字符串類型:

df = pd.DataFrame({ "name":['GuanYu', 'zhangFei', 'zhao-yun', 'machao', 'huangzhong#'], "city":['湖北省荊州市', '四川省漢中市', '四川省成都市', '甘肅省西涼區', '四川省成都市'], "salary":['30-50K', '30-50k', '30-45k', '30-40k', '30-40k'], "helpers":['關平 周倉 廖化 馬良', '張苞 魏延', '馬云祿', '馬岱 龐德', '嚴顏']})

對應數據表如下:

觀察數據可見,name列字符串格式不是很統一,既有大小寫混亂,也有-、#等其他無用字符,city列相對規整,但馬超所在列不是xx省xx市結構,而salary均有薪資上下限組成,最后helpers列則是一個復合類型,各部下之間用空格進行區分。針對這一數據,需要完成如下處理需求:

  • 規整姓名列,均變為小寫形式且過濾無用字符

  • 提取所在城市信息

  • 計算平均薪資

  • 提取部下人數信息

對于以上需求,用Pandas實現都非常之容易:

  • 姓名列統一小寫,然后過濾掉非字母的字符,其中lower是Python字符串內置的通用方法,replace雖然是Pandas中的全局方法,但嵌套了一層str屬性接口后即執行正則匹配的替換,這里即用到了正則表達式的匹配原則,即對a-z字母以外的其他字符替換為空字符:

  • 根據正則表達式,提取省市之間的城市信息,特別地,第二個關鍵詞還可能是區,所以可用正則表達式中的findall提取功能,還需注意提取的限定關鍵字為前面以"省"開頭、后面以"市"或"區"結束的中間字符,即是城市信息:

  • 計算平均薪資。由于這里的薪資字段其實還是比較規整的,即都是以K結尾(雖然可能有大小寫之別),薪資上下限用-連接,所有其實有多種方法可以實現,這里舉例其中的兩種,其中第一種用到了字符串的切分函數,第二種方法仍然是正則匹配查找。兩種方法均實現了兩個數字的提取,進而可以完成上下限的均值計算。

  • 最后是提取下屬信息,注意到這里的下屬由一個字符串組成,且下屬之間由空格間隔。針對這一需求,也可輕松實現兩種解決方案,其中之一是進行拆分然后獲取拆分后列表的長度、第二種是直接對字符串中空格進行計數,而后+1即為總的部下人數。兩種方案結果是一致的:

以上,舉了幾個簡單的例子對pandas中的字符串屬性接口str進行了牛刀小試,其中包括python內置的字符串函數split、count、len等,也包括findallreplace中嵌套正則表達式等用法,靈活運用起來效率真的是可以起飛……

最后,給出str中的所有屬性接口函數:

基本都是Python中常用的字符串函數,調用時只需在一個字符串列后調用str即可,方法簡單,但效率卻是異常明顯的。

02 時間屬性接口——dt

與str用法極其類似、對時間類型的數據處理極為友好的另一個屬性接口是dt,即datetime的簡稱,要求適用于格式是時間類型的數據。由于時間類型在某些特定應用場景還是非常常用的,所以靈活運用dt屬性接口也可實現非常便捷的數據處理操作。

這里首先仍然給出示例數據:

以上述時間序列數據為例,通過dt時間屬性接口可以很容易的實現各類時間信息的提取,例如提取年份、日期和時間信息即可分別調用year、date和time屬性即可。

這里需要注意的是,在前述str屬性接口中,多數dt后面接的都是函數,而這里獲取的year、date和time等都是屬性(因為無需參數),二者的區別體現為函數以()結尾,而屬性則無需括號。

但dt屬性接口基本上都是這種屬性接口,但也有一些是函數,例如指定類型的格式化

完整的接口清單如下:

基本上,時間格式中想得到的、想不到的基本都給予了實現,用來提取個時間信息簡直是太方便了。

03 小結

一門編程語言中的基本數據類型無非就是數值型、字符串型、時間型以及布爾型,Pandas為了應對各種數據格式的向量化操作,針對字符串和時間格式數據專門提供了str和dt兩個屬性接口(數值型數據天然支持向量化操作,而布爾型也可通過位運算符&、|、~實現并行計算),通過調用屬性接口后的系列方法,可以實現豐富的API以及高效的計算能力。尤其是字符串型數據,除了Python中通用的字符串方法外,還集成了正則表達式處理邏輯。

另外,除了str和dt兩個屬性接口外還有一個枚舉屬性接口cat(即category縮寫),但實際上用處較為局限。

總結

以上是生活随笔為你收集整理的Panda处理文本和时序数据?首选向量化的全部內容,希望文章能夠幫你解決所遇到的問題。

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