Pandas筛选删除2000年前列失败:columns_to_drop为空问题排查
解决筛选2000年前列的问题
嘿,我来帮你排查问题!你的代码里有两个关键问题导致columns_to_drop为空,咱们一步步解决:
1. 运算符误用:赋值代替了比较
你在列表推导式的条件里写了col[0]="1",这是赋值操作,不是比较判断。Python会把这个当成给col[0]赋值为'1',而不是判断它是否等于'1'——这不仅没法筛选列,甚至会触发语法错误(除非你刻意用海象运算符,但这里明显是笔误)。正确的写法应该用比较运算符==。
2. 判断逻辑不严谨:首字符为'1'的范围太宽
就算改成col[0] == "1",也会把2010年及之后的列(比如2010-1)误判成要删除的列,因为这些列的首字符也是'1'。咱们需要精准判断年份是否小于2000。
修正后的完整代码
import pandas as pd def convert_housing_data_to_quarters(): data_source = pd.read_csv('City_Zhvi_AllHomes.csv') data_source['State'] = data_source['State'].map(states) # 注意inplace参数用布尔值True更规范,不要用整数1 data_source.drop(['Metro','CountyName','RegionID','SizeRank'], axis=1, inplace=True) data_source.set_index(['State','RegionName'], inplace=True) # 精准筛选2000年之前的列:拆分列名提取年份,转整数后判断 columns_to_drop = [col for col in data_source.columns if int(col.split('-')[0]) < 2000] data_source.drop(columns_to_drop, axis=1, inplace=True) return data_source convert_housing_data_to_quarters()
代码解释
- 用
col.split('-')[0]拆分列名,提取出年份部分(比如从1999-1得到1999),转成整数后判断是否小于2000,这样就能准确筛选出所有2000年之前的列。 - 把
inplace=1改成inplace=True,虽然Python会把1视为布尔值True,但用标准布尔值代码可读性更强。
内容的提问来源于stack exchange,提问作者Tytire Recubans
相关产品推荐
相关产品推荐

