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 開篇文章不講過多,下篇文章我們再去了解一些基礎的方法。

「其他文章」