如何将Pandas DataFrame日期列提取的年份转为整数?
解决DataFrame中MM/YY格式日期的年份筛选问题
我来帮你搞定这个问题!你遇到的核心问题是——Python内置的int()函数只能处理单个值,没办法直接把整个pandas Series(也就是你提取出的年份字符串列)转成整数类型。下面给你几种靠谱的解决方案:
方案1:用pd.to_numeric()批量转数值类型
这是pandas专门用来处理Series/列级数值转换的方法,既稳健又方便:
# 先把提取的年份转为数值类型,存成新列 ecom["Year"] = pd.to_numeric(ecom["Date"].str[3:]) # 筛选2025年(对应数值25)的数据 filtered_ecom = ecom[ecom["Year"] == 25]
或者直接一步到位,不用新增列:
filtered_ecom = ecom[pd.to_numeric(ecom["Date"].str[3:]) == 25]
如果你的日期列里有一些格式不规范的内容,还可以加errors='coerce'参数,把无效值转为NaN,避免报错:
pd.to_numeric(ecom["Date"].str[3:], errors='coerce')
方案2:用astype()强制转换
如果能确定所有提取出的年份字符串都是纯数字,也可以直接用astype()转换:
ecom["Year"] = ecom["Date"].str[3:].astype(int) filtered_ecom = ecom[ecom["Year"] == 25]
不过这个方法容错率低,如果遇到非数字的字符串会直接报错,不如pd.to_numeric()稳妥。
方案3:更规范的做法——把日期转为datetime类型
其实最好的方式是直接把整个Date列转为pandas的datetime类型,这样后续做任何日期相关的操作都会更灵活:
# 按照MM/YY的格式解析日期 ecom["Date"] = pd.to_datetime(ecom["Date"], format="%m/%y") # 直接筛选年份为2025的数据 filtered_ecom = ecom[ecom["Date"].dt.year == 2025]
这样处理后,你还能轻松实现按月筛选、计算日期差等操作,比单纯提取年份字符串要实用得多。
内容的提问来源于stack exchange,提问作者Oliver Brace
相关产品推荐
相关产品推荐

