You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:55:40