【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型

 

你可能感兴趣的:(机器学习,python,pandas)