我正在规范化 pandas 数据框中的一些年份值。
years
0 2011
1 2012
2 2050
3 11
4 23
5 01
....
n 2015
如您所见,有些值是错误的,因为它们必须是 4 位数字。因此,我想将它们转换成四位数字:
year
0 2011
1 2012
2 2050
3 2011
4 2023
5 2001
...
n 2015
对于上述情况,在 previous question 中我了解到您可以使用函数替换来完成此任务:
df['years'].replace('\b\d{2}\b.*?', r'20\2', regex=True)
我尝试了不同的正则表达式:
^[0-9]{2}
^[0-9]{2}.*
(\d\d)*
^(\d{2})
r'\b\d{2}\b'
但是,这些都不起作用。因此,如何用四位数字(添加 20
)对上述数据帧进行归一化?
最佳答案
df.years = pd.to_numeric(df.years, errors='coerce')
In [12]: df
Out[12]:
years
0 2011
1 2012
2 2050
3 11
4 23
5 1
6 2015
In [13]: df.loc[df.years <= 50, 'years'] += 2000
In [14]: df
Out[14]:
years
0 2011
1 2012
2 2050
3 2011
4 2023
5 2001
6 2015
更新:转换为字符串:
In [35]: df
Out[35]:
years
0 2011.0
1 2012.0
2 2050.0
3 2011.0
4 2023.0
5 2001.0
6 NaN
7 2015.0
In [36]: df.dtypes
Out[36]:
years float64
dtype: object
In [37]: df.years.where(df.years.notnull(), '')
Out[37]:
0 2011
1 2012
2 2050
3 2011
4 2023
5 2001
6
7 2015
Name: years, dtype: object
关于python - 给定以下约束,如何将一些数字连接到另一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42353803/