如何在Pandas DataFrame中将末尾四位为9999的数值替换为0101
替换Pandas DataFrame中year列末尾四位为9999的数值
先还原你的DataFrame:
import pandas as pd df = pd.DataFrame({ 'OrdNo': [1,2,3,4,5,6,7,8,9], 'year': [20059999,20070830,20070719,20030719,20039999,20070911,20050918,20070816,20069999] })
下面提供两种实用的处理方法:
方法一:字符串正则替换
将year列转为字符串,用正则匹配末尾的9999并替换为0101,最后转回整数类型:
df['year'] = df['year'].astype(str).str.replace(r'9999$', '0101', regex=True).astype(int)
r'9999$'确保只匹配末尾四位是9999的内容- 转回整数是为了保持原列的数值格式
方法二:数值运算处理
如果year列本身是整数类型,用数值运算更高效:
# 筛选出末尾四位为9999的行 mask = df['year'] % 10000 == 9999 # 对符合条件的行,保留前四位并拼接0101(即101) df.loc[mask, 'year'] = (df.loc[mask, 'year'] // 10000) * 10000 + 101
df['year'] % 10000取末尾四位,判断是否等于9999df['year'] // 10000取前四位,乘以10000后加101,得到类似20050101的数值
处理后的最终结果:
OrdNo year 0 1 20050101 1 2 20070830 2 3 20070719 3 4 20030719 4 5 20030101 5 6 20070911 6 7 20050918 7 8 20070816 8 9 20060101
内容的提问来源于stack exchange,提问作者user5618251
相关产品推荐
相关产品推荐

