使用正则表达式重命名pandas数据框中的列

时间:2015-09-24 00:26:23

标签: python pandas

   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'

的列

1 个答案:

答案 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