Python 如何替换数据框中的年份,并将该值乘以数据框中的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

我需要将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([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没有意识到这一点