【pandas】dataframe去空字串處理
阿新 • • 發佈:2018-12-12
1 問題
在處理資料的時候遇到一個問題是,明明某些列有很多是空的,但是在python裡用dataframe.info統計出來並不是空的,就很奇怪,排查之後發現在我的excel表裡這些資料看起來是空的值,但其實是一個空格。
但是用isnull判斷是為False的
2 pandas的空值
在pandas裡空值是指NA,包括numpy的np.nan,python的None,pandas對空值進行操作可以用isnull/notnull/isna/notna/fillna/dropna等等,但是,這些操作對空字串均無效。
空字串即“ ”(一個或多個空格),但在excel表格裡其實是看不出來,pandas也把它當成有值進行操作。
3 正則匹配空格替換
DataFrame.
replace
(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')Replace values given in to_replace with value.
我的想法是對整個dataframe替換空格為np.nan,於是看到replace方法裡可以用正則替換,測試發現可以正確替換空字串
df.replace(to_replace=r'^\s*$',value=np.nan,regex=True,inplace=True)
其中\s表示空白字元,匹配任何空白字元,包括空格、製表符、換頁符等
*表示任意個
具體replace方法見dataframe.replace官方文件
4 測試
對替換前後的資料進行統計,程式碼如下
print(info.info()) grades.replace(to_replace=r'^\s*$',value=np.nan,regex=True,inplace=True) info.replace(to_replace=r'^\s*$',value=np.nan,regex=True,inplace=True) print(info.info())
轉換前後統計的非空值結果如下,轉換後型別變float是因為np.nan是float型