Pandas資料分析:處理文字資料(str/object)各類操作+程式碼一文詳解(一)
我正在參加「掘金·啟航計劃」
前言
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'])
pd.Series(["a", "b", "c"], dtype="string")
亦或是:
pd.Series(["a", "b", "c"], dtype=pd.StringDtype())
若開始沒有指定則可以使用astype方法強制轉換:
s = pd.Series(["a", "b", "c"])
s.astype("string")
三、Object與String的差別
對於StringDtype,返回數值輸出的字串操作方法將始終返回可為空的整數資料型別,而不是int或float資料型別,具體取決於NA值的存在。返回布林輸出的方法將返回可為空的布林資料型別。
我們用案例展示一遍就明白了:
s = pd.Series(["a", None, "b"], dtype="string")
s
s.str.count("a")
s.dropna().str.count("a")
以上都是string資料型別處理後的結果,我們與之對比一下object就會發現:
s2 = pd.Series(["a", None, "b"], dtype="object")
s2
s2.str.count("a")
可以發現object與string不同的是聚合後顯示的資料型別,前者是float後者則是int。
s2.dropna().str.count("a")
而當去掉NA時候則為int,這和string一樣。當存在NA值時,輸出資料型別為float64。
s.str.isdigit()
s.str.match("a")
有些字串方法,如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()
大寫轉換upper()
s.str.upper()
2.元素長度
輸出每個元素的長度len()就可以做到:
s.str.len()
3.字串空格去除
這種方法有三種控制形式,這裡我們建立一個覆蓋測試用例全面的資料集:
s=pd.Index([' A','A ',' A ','A'],dtype='string')
全部去除strip()
s.str.strip()
只去除左邊lstrip()
s.str.lstrip()
只去除右邊rstrip()
s.str.rstrip()
索引上的字串方法對於處理或轉換DataFrame列特別有用。例如,可能有帶有前導或尾隨空格的列:
df = pd.DataFrame(
np.random.randn(3, 2), columns=[" Column A ", " Column B "], index=range(3)
)
我們將列索引提取之後使用str類方法就可以處理轉換:
df.columns.str.strip()
也可以自由進行大小寫轉換:
df.columns.str.lower()
組合一起來用的話,還可以搭配其他函式實現複雜的轉換效果:
df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
開篇文章不講過多,下篇文章我們再去了解一些基礎的方法。
- 一文速學數模-整合預測模型Boost(提升方法)原理以及框架 模型速覽
- Python-sklearn機器學習之旅:我的第一個機器學習實戰專案
- 斯皮爾曼相關(spearman)相關性分析一文詳解 python例項程式碼
- sklearn預測評估指標計算詳解:準確率(Accuracy)、精確率(Precision)、召回率(Recall)、F1score
- 機器學習:效能度量篇-Python利用鳶尾花資料繪製P-R曲線
- Pandas資料分析:快速圖表視覺化各類操作詳解 例項程式碼(一)
- Pandas資料分析:快速圖表視覺化各類操作詳解 例項程式碼(二)
- Pandas資料分析:處理文字資料(str/object)各類操作 程式碼一文詳解(一)
- 決策樹(Decision Tree)演算法詳解及python實現
- PCA(主成分分析法)原理以及應用 程式碼實現
- 機器學習:效能度量篇-Python利用鳶尾花資料繪製ROC和AUC曲線
- 深度學習面試常見問題
- 資料預處理歸一化詳細解釋
- 一文速學-熵權法實戰確定評價指標權重
- 機器學習:基於概率的樸素貝葉斯分類器詳解--Python實現以及專案實戰
- 機器學習:貝葉斯分類器詳解(一)-貝葉斯決策理論與樸素貝葉斯
- 秩和比綜合評價法(RSR)詳解及Python實現和應用
- SVM(Support Vector Machines)支援向量機演算法原理以及應用詳解 Python程式碼實現
- 機器學習:基於概率的樸素貝葉斯分類器詳解--Python實現以及專案實戰
- 機器學習:效能度量篇-Python利用鳶尾花資料繪製P-R曲線