Python 如何替换数据框中的年份,并将该值乘以数据框中的12
我需要将Year/years字符串替换为12,并对该值执行乘法运算 下面是示例数据帧Python 如何替换数据框中的年份,并将该值乘以数据框中的12,python,pandas,dataframe,Python,Pandas,Dataframe,我需要将Year/years字符串替换为12,并对该值执行乘法运算 下面是示例数据帧 df = pd.DataFrame({'ten_in_Months' : ['1 year','2 years','3 years','40','50',],'paid_by' : ['hi', 'foo', 'fat', 'cat','dog']}) 我需要的是1年被12年取代,2年被24年取代,3年被36年取代 df['ten'u in'u months'].mul
df = pd.DataFrame({'ten_in_Months' : ['1 year','2 years','3 years','40','50',],'paid_by' : ['hi',
'foo', 'fat', 'cat','dog']})
我需要的是1年被12年取代,2年被24年取代,3年被36年取代
df['ten'u in'u months'].mul([12],axis=0)
我不知道如何使用正则表达式查找该年份,替换并乘以12*($)您可以使用
str.extract
获取表示年份的数字:
m = pd.to_numeric(df['ten_in_Months'].str.extract('(\\d+) years?')[0]) * 12
df['ten_in_Months'] = m.combine_first(df['ten_in_Months']).astype('int')
如果要将不带
“year”
字符串的条目保留为月份,则可以使用以下代码
df['ten_in_Months'] = df['ten_in_Months'].apply(lambda x: int(x.split('year')[0])*12 if len(x.split('year')) > 1 else x)
这里有一种方法:
pat = r'(\d+)\syear(?:s)?$'
m = df.ten_in_Months.str.match(pat)
months = df.ten_in_Months.str.extract(pat).squeeze().astype(float).mul(12)
df['ten_in_Months'] = df['ten_in_Months'].mask(m, months)
print(df)
ten_in_Months paid_by
0 12 hi
1 24 foo
2 36 fat
3 40 cat
4 50 dog
您可以
提取
所有数字,并借助掩码
仅对包含
年份的单元格进行乘法:
s = df['ten_in_Months']
df['ten_in_Months'] = s.str.extract('(\d+)').astype(int).\
mask(s.str.contains('year'), lambda x: x * 12)
如果该字段不包含年
是否将其视为月?是的,其他记录都是月,我需要将存在年/年的任何位置转换为月。我的C天习惯\d
匹配正则表达式中的一个数字,但\
也是文字字符串的转义字符。因此,双\\
将\d
传递给正则表达式引擎,请参见。我最初认为这只是一个打字错误:)Thx没有意识到这一点