2017-10-19 15 views
1

J'ai un DF qui ressemble àConserver le dernier 2 éléments de nom de colonne séparés par pandas géants de python de tuyau

a|b|c|d e|f|g|h i|j|k|l 
1   4   7 
2   5   8 
3   6   9 

Je veux la transformer pour ressembler

|c|d  g|h k|l 
1   4  7 
2   5  8 
3   6  9 

Lorsque j'utilise les lignes ci-dessous il me donne dernier ou dernier

test.rename(columns = lambda x: x.split("|")[-1] , inplace = True) 
test.rename(columns = lambda x: x.split("|")[-2] , inplace = True) 

mais quand je le donne comme ci-dessous, mais il exécute quand je fais un test.head() je reçois une erreur

test.rename(columns = lambda x: x.split("|")[-2:] , inplace = True) 

TypeError: unhashable type: 'list'

S'il vous plaît conseiller sur le correctif.

Répondre

2

Utilisez join, car la sélection 2 dernières valeurs se list:

test.rename(columns = lambda x: '|'.join(x.split("|")[-2:]) , inplace = True) 
print (test) 
    c|d g|h k|l 
0 1 4 7 
1 2 5 8 
2 3 6 9 

Une autre solution, grâce Zero:

test.columns = test.columns.str.split('|').str[-2:].str.join('|') 
+0

Oui ça a marché merci –

+1

Ou 'df.columns.str.split ('|'). str [-2:]. str.join ('|') 'pour avoir la liste des colonnes. – Zero

+1

Oui, la solution et le zéro ont aussi bien fonctionné –