调用类方法后DataFrame变为NoneType且无法操作的原因排查
问题分析与修复
你遇到的AttributeError: 'NoneType' object has no attribute 'dropna'错误,以及代码里的其他问题,根源如下:
1. remove_nulls方法的核心错误
当你使用dropna(subset=[col], inplace=True)时,inplace=True会直接修改原DataFrame,返回值为None。此时你把self.dataf赋值成了这个None,不管外部是否接收返回值,类内部的self.dataf已经变成无效的None对象,后续任何对它的操作都会触发错误。
修复方式:去掉inplace=True,让dropna返回新的DataFrame对象并赋值:
def remove_nulls(self, col): self.dataf = self.dataf.dropna(subset=[col]) return self.dataf
2. remove_upper_quantile方法的语法错误
这个方法还有两处明显问题:
- 括号不匹配:末尾缺少闭合的方括号与圆括号
- 列比较逻辑错误:
col是列名字符串,不能直接和数值比较,应该用self.dataf[col]获取列数据
修复后的方法:
def remove_upper_quantile(self, col, quantile_num): quantile_val = self.dataf[col].quantile(quantile_num) self.dataf = self.dataf[self.dataf[col] < quantile_val] return self.dataf
修复后的完整代码
class DataCleaner: def __init__(self, dataf): """this is the constructor that initializes the dataframe to be cleaned""" self.dataf = dataf def remove_upper_quantile(self, col, quantile_num): quantile_val = self.dataf[col].quantile(quantile_num) self.dataf = self.dataf[self.dataf[col] < quantile_val] return self.dataf def remove_nulls(self, col): self.dataf = self.dataf.dropna(subset=[col]) return self.dataf
此时再执行调用代码:
clean_company = DataCleaner(df) df = clean_company.remove_nulls('market_cap')
就能正常处理数据,返回清理后的DataFrame。
内容的提问来源于stack exchange,提问作者liatkatz
相关产品推荐
相关产品推荐

