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曲線