Y2010 Y2011 Y2012 Y2013 test
0 86574 77806 93476 99626 2
1 60954 67873 65135 64418 4
2 156 575 280 330 6
3 1435 1360 1406 1956 7
4 3818 7700 6900 5500 8
有没有办法将此数据框的列从Y2010 ...重命名为2010 ..即删除初始的'Y'。我想使用正则表达式,因为我有很多这样的列。我试过这个:
df.rename(df.filter(regex='^Y\d{4}').columns.values, range(2010, 2013 + 1, 1))
- 编辑: 数据框的包含不包含'Y'
的列答案 0 :(得分:9)
我使用地图:
In [11]: df.columns.map(lambda x: int(x[1:]))
Out[11]: array([2010, 2011, 2012, 2013])
In [12]: df.columns = df.columns.map(lambda x: int(x[1:]))
In [13]: df
Out[13]:
2010 2011 2012 2013
0 86574 77806 93476 99626
1 60954 67873 65135 64418
2 156 575 280 330
3 1435 1360 1406 1956
4 3818 7700 6900 5500
编辑:我忘记了most-popular pandas question:
In [21]: df.rename(columns=lambda x: int(x[1:]))
Out[21]:
2010 2011 2012 2013
0 86574 77806 93476 99626
1 60954 67873 65135 64418
2 156 575 280 330
3 1435 1360 1406 1956
4 3818 7700 6900 5500
如果你有其他列,我可能会编写一个正确的函数(而不是lambda):
def maybe_rename(col_name):
if re.match(r"^Y\d{4}", col_name):
return int(col_name[1:])
else:
return col_name
In [31]: df.rename(columns=maybe_rename)
Out[31]:
2010 2011 2012 2013 test
0 86574 77806 93476 99626 2
1 60954 67873 65135 64418 4
2 156 575 280 330 6
3 1435 1360 1406 1956 7
4 3818 7700 6900 5500 8