datawhale組隊學習——pandas基礎下——文本數據

學習資源鏈接:pandas文本數據

一、總覽

在這裏插入圖片描述

二、正則表達式

正則表達式詳情請看這裏正則表達式
這篇正則表達式下面有一個內容是要你輸入一個正則表達式,然後看你的是否與上面給的一系列字符匹配。如下圖:
在這裏插入圖片描述
並附上正則表達式手冊
現在這裏列出一些符號的含義吧

\d 對於Unicode(str類型)模式:匹配任何一個數字,包括[0-9]和其他數字字符;
如果開啓了re.ASCII,只匹配 [0-9]對於8位(bytes類型)模式:匹配[0-9]中任何一個數字\D與\d相反,如果開啓了re.ASCII,只匹配 [^0-9]

\D 匹配一個非數字字符。等價於[^0-9]

. 匹配除換行符以外的任意字符

\w 匹配字母或數字或下劃線或漢字 等價於 ‘[A-Za-z0-9_]’。
問:[a-zA-Z0-9]和[0-9a-zA-Z]有什麼不同?
答:沒有不同,與順序無關,都是表示了小寫字母、大寫字母、整數數字

\s 匹配任意的空白符

\d 匹配數字

\b 匹配單詞的開始或結束

^ 匹配字符串的開始

$匹配字符串的結束
+表示重複一次或者多次
*表示重複零次或者多次
具體見下圖
在這裏插入圖片描述
{n,m} 表示n 到 m 次
\w能不能匹配漢字要視你的操作系統和你的應用環境而定

the pattern [abc] will only match a single a, b, or c letter and nothing else.這句話的意思是隻要需要匹配的那個字符裏面含有abc其中一個字符就好了,就是匹配的
the pattern [^abc] will match any single character except for the letters a, b, or c.這句話的意思是除了abc這三個字符之外會匹配任何一個字符。

the pattern [0-6] will only match any single digit character from zero to six, and nothing else. And likewise, [^n-p] will only match any single character except for letters n to p.
這裏與上面那個一樣,只是把字母換成了數字

? 當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式儘可能少的匹配所搜索的字符串,而默認的貪婪模式則儘可能多的匹配所搜索的字符串。例如,對於字符串“oooo”,“o+?”將匹配單個“o”,而“o+”將匹配所有“o”。

(?:pattern) 匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以後使用。這在使用或字符“(|)”來組合一個模式的各個部分是很有用。例如“industr(?:y|ies)”就是一個比“industry|industries”更簡略的表達式。

For example, the pattern ab?c will match either the strings “abc” or “ac” because the b is considered optional.這句話的意思就是說b可選可不選,可以匹配abc和ac兩種

Similar to the dot metacharacter, the question mark is a special character and you will have to escape it using a slash ? to match a plain question mark character in a string.這句話的意思就是如果要匹配問號,得在前面加一個\來匹配問號。見下圖:
在這裏插入圖片描述
\f 匹配一個換頁符。等價於\x0c和\cL。
\n 匹配一個換行符。等價於\x0a和\cJ。
\r 匹配一個回車符。等價於\x0d和\cM。
\s 匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。
\S 匹配任何非空白字符。等價於[^ \f\n\r\t\v]。
\t 匹配一個製表符。等價於\x09和\cI。
\v 匹配一個垂直製表符。等價於\x0b和\cK。

三、思考題

【問題一】 str對象方法和df/Series對象方法有什麼區別?

【問題二】 給出一列string類型,如何判斷單元格是否是數值型數據?

pd.Series(['1.2','1','-0.3','a',np.nan],dtype="string").str.isnumeric()

【問題三】 rsplit方法的作用是什麼?它在什麼場合下適用?

split()正分割列; rsplit逆序分割列

s = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'], dtype="string")
s
s.str.split('_')

rsplit()是逆序分割,當我們最後面有幾列需要單獨分割出來,而且由於數列比較多從正着數不知道第幾列或者每一行列數不一樣而我們只需要最後一列,在這種情況下是需要用到rsplit()的

【問題四】 在本章的第二到第四節分別介紹了字符串類型的5類操作,請思考它們各自應用於什麼場景?

  1. str.split方法
    根據某一個元素分割,默認爲空格
  2. str.cat方法
    對於單個Series而言,就是指所有的元素進行字符合併爲一個字符串
    對於兩個Series合併而言,是對應索引的元素進行合併
  3. str.replace
    str.replace針對的是object類型或string類型,默認是以正則表達式爲操作,目前暫時不支持DataFrame上使用
  4. str.extract方法(子串匹配與提取)
    利用?正則標記選擇部分提取
  5. str.extractall方法
    與extract只匹配第一個符合條件的表達式不同,extractall會找出所有符合條件的字符串,並建立多級索引(即使只找到一個)
  6. str.contains和str.match
    前者的作用爲檢測是否包含某種正則模式,並且可選參數爲na,此時如果是na參會返回true。
    str.match與其區別在於,match依賴於python的re.match,檢測內容爲是否從頭開始包含該正則模式

四、練習題

【練習一】 現有一份關於字符串的數據集,請解決以下問題:

(a)現對字符串編碼存儲人員信息(在編號後添加ID列),使用如下格式:“×××(名字):×國人,性別×,生於×年×月×日”

(b)將(a)中的人員生日信息部分修改爲用中文表示(如一九七四年十月二十三日),其餘返回格式不變。

(c)將(b)中的ID列結果拆分爲原列表相應的5列,並使用equals檢驗是否一致。

【練習二】 現有一份半虛擬的數據集,第一列包含了新型冠狀病毒的一些新聞標題,請解決以下問題:

(a)選出所有關於北京市和上海市新聞標題的所在行。

(b)求col2的均值。

(c)求col3的均值。

五、程序代碼及相關注釋

因暫時不清楚如何將jupyter上寫的導入到這個裏面來,就暫時截圖,把圖片放上來。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章