Pandas数据操作报错:无法转换Series为int,如何统计2000年后出版书籍数?
问题修复方案
你的代码报错原因有两个:
df["publication_date"][-4: 0]是对整个Series按行索引做切片,不是提取每个日期字符串的最后四位年份;int()无法直接转换整个Series,只能处理单个字符串值,因此触发TypeError。
下面是两种可行的修复方法:
方法一:直接提取年份字符串并转换比较
利用Pandas的str属性对每个字符串做切片,提取最后四位年份,转成整数后筛选统计:
# 方式1:用count()统计 df[df["publication_date"].str[-4:].astype(int) >= 2000]["publication_date"].count() # 方式2:更简洁的sum()统计布尔值数量 (df["publication_date"].str[-4:].astype(int) >= 2000).sum()
方法二:转换为datetime类型后提取年份(更规范)
将日期列转换为Pandas的datetime类型,直接提取年份进行比较,这种方法能更好处理日期格式异常:
import pandas as pd # 转换日期列,format指定输入格式为dd/mm/yyyy df["publication_date"] = pd.to_datetime(df["publication_date"], format="%d/%m/%Y") # 统计年份>=2000的数量 (df["publication_date"].dt.year >= 2000).sum()
如果数据中存在无效日期格式,可以添加errors='coerce'参数,将无效值转为NaT(缺失日期),避免报错:
df["publication_date"] = pd.to_datetime(df["publication_date"], format="%d/%m/%Y", errors="coerce") (df["publication_date"].dt.year >= 2000).sum()
内容的提问来源于stack exchange,提问作者Nuray Ganb
相关产品推荐
相关产品推荐

