1. 程式人生 > >【pandas】dataframe去空字串處理

【pandas】dataframe去空字串處理

參考:dataframe.replace官方文件

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=Nonevalue=Noneinplace=Falselimit=Noneregex=Falsemethod='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型