如何在Pandas Series中用日期包含的年份替换该日期元素?
在Pandas Series中提取日期字符串的年份值
没问题,我来帮你搞定这个需求——把Series里的日期格式字符串(比如2/8/2014 0:00)替换成对应的年份,同时保留其他原有数据。下面是具体的实现步骤和代码:
步骤1:准备示例数据
首先把你提供的数据转换成Pandas Series:
import pandas as pd # 你的原始数据 data = [2014, 180657, 2015, 153837, 2014, 72395, 2012, 69708, 2013, 61364, 2015, 54117, 2013, 3313, 2012, 1076, '2/8/2014 0:00', 2, '7/3/2014 0:00', 2, '1/29/2015 0:00', 2, '9/1/2014 0:00', 2, '11/22/2014 0:00', 2, '10/16/2014 0:00', 2] # 创建Series s = pd.Series(data)
步骤2:提取年份并处理数据
我们可以用正则表达式提取日期字符串中的四位年份,同时保留其他非日期数据:
# 统一转成字符串后提取四位数字(即年份),非日期值用原数据填充 s_processed = s.astype(str).str.extract(r'(\d{4})', expand=False).fillna(s) # 可选:将结果转成数值类型(方便后续计算,不影响非数值数据) s_processed = pd.to_numeric(s_processed, errors='ignore')
代码解释
astype(str):把Series里的所有元素转成字符串,这样数字和日期字符串都能统一处理。str.extract(r'(\d{4})'):用正则匹配每个字符串中的第一个连续四位数字,正好对应日期里的年份;对于本来就是四位年份的数字(比如2014),转成字符串后也会被正确提取。fillna(s):对于没有四位数字的元素(比如180657、2),extract会返回NaN,这里用原数据填充,保证这些值不变。pd.to_numeric(..., errors='ignore'):把能转成数字的元素转成数值类型,非数值元素保持原样,不影响后续使用。
处理后的结果示例
处理后,原Series中的日期字符串会被替换成对应年份:
'2/8/2014 0:00'→2014'1/29/2015 0:00'→2015
其他非日期元素(比如180657、2、2013)都会保持原来的值。
内容的提问来源于stack exchange,提问作者Akshit
相关产品推荐
相关产品推荐

