在Pandas中将日期列的月份字符串转换为整数的技术咨询
解决电影数据表月份列提取数字后仍为object类型的问题
核心原因
你提取到月份数字但列仍为object类型,大概率是因为列内存在混合数据类型(比如部分是字符串形式的数字、部分是整数,或者包含空值/异常值),或者提取时没有将结果转为数值类型。
分步处理方案
先排查列内数据情况
先确认列里的元素类型和异常值,执行以下命令:# 查看列内所有元素的类型 print(df['release date'].apply(type).unique()) # 查看列内的唯一值,排查异常内容 print(df['release date'].value_counts(dropna=False))转换为数值类型
如果列内是字符串形式的数字(比如"12"而非12),直接用pd.to_numeric转换,同时处理无法转换的内容:df['release_month'] = pd.to_numeric(df['release date'], errors='coerce')参数
errors='coerce'会把无效内容转为NaN,后续可以根据需求用fillna()填充或dropna()删除空值行。规范映射提取流程(如果用字典映射月份)
如果你是通过月份缩写映射得到数字,确保映射后直接输出整数:# 定义月份映射字典 month_map = { 'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12 } # 提取月份缩写 df['month_abbr'] = df['release date'].str.split().str[0] # 映射为整数类型的月份 df['release_month'] = df['month_abbr'].map(month_map)这种方式得到的
release_month列会是int64(无空值)或float64(含空值)类型。强制转换类型(确认无异常值时)
若确认列内所有元素都是数字,可直接强制转换:# 转为整数(无空值时可用) df['release_month'] = df['release_month'].astype(int) # 若存在空值,转为浮点型 df['release_month'] = df['release_month'].astype(float)
验证结果
转换完成后,用df['release_month'].info()或df.dtypes查看列类型,确认已转为数值类型。
内容的提问来源于stack exchange,提问作者Raul Torres
相关产品推荐
相关产品推荐

