技术咨询:如何从wave_year变量提取年份前内容并创建新变量(移除末尾四位数字)
解决方法:从
wave_year变量移除末尾四位数字 嗨~看你的需求,是要从wave_year列里去掉末尾的四位年份数字,保留前面的内容对吧?这里给你几种简单直接的方法,分Python(Pandas)和R两种常用数据分析工具来介绍:
Python(Pandas)场景
方法1:字符串切片(最简便)
因为目标是固定移除最后四位,直接用字符串切片就能搞定,代码简洁高效:
df['new_variable'] = df['wave_year'].str[:-4]
举个例子:如果wave_year的值是wave2023,处理后得到wave;如果是wave0012023,结果就是wave001,完全符合你的需求。
方法2:正则表达式(适配复杂格式)
如果你的wave_year格式偶尔有变化,正则表达式能更精准地定位末尾的四位数字并移除:
import re df['new_variable'] = df['wave_year'].apply(lambda x: re.sub(r'\d{4}$', '', x))
这里\d{4}$的意思是匹配字符串末尾的四位数字,用空字符串替换就完成了移除操作。
R语言场景
方法1:字符串截取
基础R和stringr包都能轻松实现:
# 基础R写法 df$new_variable <- substr(df$wave_year, 1, nchar(df$wave_year)-4) # stringr包(更直观) library(stringr) df$new_variable <- str_sub(df$wave_year, end = -5)
注:str_sub里的end=-5表示截取到倒数第五位,刚好去掉最后四位数字。
方法2:正则表达式
用gsub函数匹配并替换末尾四位数字:
df$new_variable <- gsub("\\d{4}$", "", df$wave_year)
小提示
如果你的wave_year列不是字符串类型,记得先转成字符串:
- Pandas:
df['wave_year'] = df['wave_year'].astype(str) - R:
df$wave_year <- as.character(df$wave_year)
内容的提问来源于stack exchange,提问作者Tommasino
相关产品推荐
相关产品推荐

