Pandas資料分析:處理文字資料(str/object)各類操作+程式碼一文詳解(一)

語言: CN / TW / HK

我正在參加「掘金·啟航計劃」

前言

Pandas資料分析系列專欄已經更新了很久了,基本覆蓋到使用pandas處理日常業務以及常規的資料分析方方面面的問題。從基礎的資料結構逐步入門到處理各類資料以及專業的pandas常用函式講解都花費了大量時間和心思創作,如果大家有需要從事資料分析或者大資料開發的朋友推薦訂閱專欄,將在第一時間學習到Pandas資料分析最實用常用的知識。此篇部落格篇幅較長,涉及到處理文字資料(str/object)等各類操作,值得細讀實踐一番,我會將Pandas的精華部分挑出細講實踐。博主會長期維護博文,有錯誤或者疑惑可以在評論區指出,感謝大家的支援。

一、文字資料型別

Pandas用來代表文字資料型別有兩種: - object:一般為NumPy的陣列 - string:最常規的文字資料

我們最常用的還是使用string來儲存文字檔案,但是使用dataframe和series進行資料處理轉換的時候object資料型別又用的多。在Pandas1.0版本之前只有object型別,這會導致字元資料和非字元資料全部都以object方式儲存,導致處理混亂。而後續版本優化加入了String更好的區分了處理文字資料的耦合問題。目前的object型別依舊是文字資料和陣列型別的string資料,但是Pandas為了後續的相容性依舊將object型別設為預設的文字資料儲存型別。

二、文字轉換

例如我們新建一個Series:

pd.Series(['a','b','c'])

圖片.png

pd.Series(["a", "b", "c"], dtype="string")

圖片.png

亦或是:

pd.Series(["a", "b", "c"], dtype=pd.StringDtype())

圖片.png

若開始沒有指定則可以使用astype方法強制轉換:

s = pd.Series(["a", "b", "c"]) s.astype("string")

圖片.png

圖片.png

三、Object與String的差別

對於StringDtype,返回數值輸出的字串操作方法將始終返回可為空的整數資料型別,而不是int或float資料型別,具體取決於NA值的存在。返回布林輸出的方法將返回可為空的布林資料型別。

我們用案例展示一遍就明白了:

s = pd.Series(["a", None, "b"], dtype="string") s

圖片.png

s.str.count("a")

圖片.png

s.dropna().str.count("a")

圖片.png

以上都是string資料型別處理後的結果,我們與之對比一下object就會發現:

s2 = pd.Series(["a", None, "b"], dtype="object") s2

圖片.png

s2.str.count("a")

圖片.png

可以發現object與string不同的是聚合後顯示的資料型別,前者是float後者則是int。

s2.dropna().str.count("a")

圖片.png

而當去掉NA時候則為int,這和string一樣。當存在NA值時,輸出資料型別為float64。

s.str.isdigit()

圖片.png

s.str.match("a")

圖片.png

有些字串方法,如Series.str.decode()在StringArray上不可用,因為StringArray只儲存字串,而不是位元組。在比較操作中,陣列。StringArray和由StringArray支援的序列將返回一個具有BooleanDtype的物件,而不是bool dtype物件。StringArray中缺少的值將在比較操作中傳遞,而不是像numpy.nan那樣總是比較不相等的值。

四、String處理方法

序列和索引都配備了一組字串處理方法,可以輕鬆地對陣列的每個元素進行操作。最重要的是這些方法自動排除丟失的/NA值。這些方法通過str屬性訪問,通常名稱與等效(標量)內建字串方法匹配:

1.大小寫轉換

這裡我們建立測試用例:

s=pd.Series(['A','b','C',np.nan,'ABC','abc','AbC'],dtype='string')

小寫轉換lower()

s.str.lower()

圖片.png

大寫轉換upper()

s.str.upper()

圖片.png

2.元素長度

輸出每個元素的長度len()就可以做到:

s.str.len()

圖片.png

3.字串空格去除

這種方法有三種控制形式,這裡我們建立一個覆蓋測試用例全面的資料集:

s=pd.Index([' A','A ',' A ','A'],dtype='string')

全部去除strip()

s.str.strip()

圖片.png

只去除左邊lstrip()

s.str.lstrip()

圖片.png

只去除右邊rstrip()

s.str.rstrip()

圖片.png 索引上的字串方法對於處理或轉換DataFrame列特別有用。例如,可能有帶有前導或尾隨空格的列:

df = pd.DataFrame( np.random.randn(3, 2), columns=[" Column A ", " Column B "], index=range(3) )

圖片.png

我們將列索引提取之後使用str類方法就可以處理轉換:

df.columns.str.strip()

圖片.png

也可以自由進行大小寫轉換:

df.columns.str.lower()

圖片.png 組合一起來用的話,還可以搭配其他函式實現複雜的轉換效果:

df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")

圖片.png 開篇文章不講過多,下篇文章我們再去了解一些基礎的方法。

「其他文章」