Python爬取COVID数据集后无法将DataFrame空单元格替换为0求解
问题描述
使用Python的BeautifulSoup和Selenium爬取COVID数据集生成的DataFrame中,部分列存在空单元格,无法将这些空值替换为0,尝试现有解决方案均无效,原始代码如下:
def recode_empty_cells(dataframe, list_of_columns): for column in list_of_columns: dataframe[column] = dataframe[column].replace('\xa0',0) dataframe[column] = dataframe[column].replace(" ",0) dataframe[column] = dataframe[column].fillna(0) return dataframe recode_empty_cells(df, df.columns)
解决方案
失效原因
- 没有覆盖爬取数据常见的所有空白类型,包括空字符串
""、多个连续空格、制表符\t、全角空格\u3000等场景 - 调用函数时没有将返回的DataFrame赋值给原变量,函数内的修改不会同步到外部的df对象
修正后代码
import pandas as pd import numpy as np def recode_empty_cells(dataframe, list_of_columns): for column in list_of_columns: # 正则匹配所有全空白字符串转为空值 dataframe[column] = dataframe[column].replace(r'^\s*$', np.nan, regex=True) # 覆盖特殊空格类型 dataframe[column] = dataframe[column].replace(['\xa0', '\u3000'], np.nan) # 统一填充0 dataframe[column] = dataframe[column].fillna(0) return dataframe # 必须接收返回值赋值给原变量才会生效 df = recode_empty_cells(df, df.columns)
验证及排查方法
- 执行
print(df.isna().sum())可快速查看所有列剩余空值数量,确认替换效果 - 如果仍有空值未被替换,执行以下代码查看未匹配空值的实际字符编码,补充到replace的替换规则中即可:
print(df[df['待排查列名'].apply(lambda x: isinstance(x, str) and x.isspace() or pd.isna(x))]['待排查列名'].apply(repr).unique())
内容的提问来源于stack exchange,提问作者Srija
相关产品推荐
相关产品推荐

