2015-09-24 4 views
2
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». Я хочу использовать регулярные выражения, так как у меня довольно много таких столбцов. Я попытался это:Переименование столбцов в кадре данных pandas с использованием регулярных выражений

df.rename(df.filter(regex='^Y\d{4}').columns.values, range(2010, 2013 + 1, 1)) 

--edit: В dataframe doees включают столбцы, которые не начинаются с 'Y'

ответ

3

Я хотел бы использовать карту:

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 

Если у вас есть дополнительные столбцы, я бы, наверное, написать правильную функцию (а не лямбда):

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 
+0

мой плохой, dataframe действительно включает столбцы, которые не начинаются с «Y», поэтому я использовал фильтр. Будет обновлен вопрос, чтобы отразить это. – user308827

+0

@ user308827 Исправлено! –

+0

спасибо! это отлично работает – user308827

Смежные вопросы