基于包含日期的DataFrame
import pandas as pd
df = pd.DataFrame({'month':['2','5','8'],'year':['2001',' 89','1999']})
print(df)
month year
0 2 2001
1 5 89
2 8 1999
我想用19
为所有只包含2位数字的年份示例添加前缀,这样得到的DataFrame为
month year
0 2 2001
1 5 1989
2 8 1999
我试
pattern = r'[^\d]*\d{2}[^\d]*'
replacement = lambda m: '19'+m
df.year = df.year.str.replace(pattern,replacement)
print(df)
month year
0 2 NaN
1 5 NaN
2 8 NaN
但这行不通。有什么问题吗?
3条答案
按热度按时间nlejzf6q1#
[^\d]
要求有一个不是数字的字符。但是你说这个可以重复零次,当然当有两个以上的数字时,这也是正确的。您希望匹配^\d{2}$
。(Also,
[^\d]
更好地写为\D
。)不过,在这里,数值比较可能比正则表达式好得多。请检查该数字是否小于100。
z9gpfhce2#
lambda m: '19'+m
是错误的,因为m
是MatchData
对象,而不是字符串。您可能已经尝试了m.group()
,但是由于您还匹配数字两端的任何非数字字符(如空格),因此仍然可能得到错误的结果。您可以使用
备注:
str.strip()
消除前导/尾随空格^\d{2}
匹配19
和匹配值的串联(\g<0>
是整个匹配反向引用)。hsvhsicv3#
计数长度为2的字符串,并在其前面加上19: