2016-04-29 13 views
0

Ich habe einen Datenrahmen und möchte die Spalten basierend auf einem Wörterbuch mit mehreren Werten pro Schlüssel umbenennen. Der Wörterbuchschlüssel hat den gewünschten Spaltennamen und die Werte enthalten möglicherweise alte Spaltennamen. Die Spaltennamen haben kein Muster.Umbenennen Spalten mit mehreren Wert Wörterbuch

import pandas as pd 
column_dict = {'a':['col_a','col_1'], 'b':['col_b','col_2'], 'c':'col_c','col_3']} 

df = pd.DataFrame([(1,2.,'Hello'), (2,3.,"World")], columns=['col_1', 'col_2', 'col_3']) 

Funktionstext mit Schlüssel

def replace_names(text, dict): 
    for key in dict: 
    text = text.replace(dict[key],key) 
return text 


replace_names(df.columns.values,column_dict) 

Gibt einen Fehler zu ersetzen, wenn auf Spaltennamen

genannt
AttributeError: 'numpy.ndarray' object has no attribute 'replace' 

Gibt es eine andere Möglichkeit, dies zu tun?

Antwort

2

Sie können df.rename(columns=...) verwenden, wenn Sie eine dict liefern, die alten Spaltennamen zu neuen Spaltennamen zuordnet:

import pandas as pd 
column_dict = {'a':['col_a','col_1'], 'b':['col_b','col_2'], 'c':['col_c','col_3']} 
df = pd.DataFrame([(1,2.,'Hello'), (2,3.,"World")], columns=['col_1', 'col_2', 'col_3']) 

col_map = {col:key for key, cols in column_dict.items() for col in cols} 
df = df.rename(columns=col_map) 

ergibt

a b  c 
0 1 2.0 Hello 
1 2 3.0 World 
+0

Perfect, viel einfacher! –

+0

Diese Antwort sollte als "akzeptiert" markiert werden, wenn es eine Lösung für das ursprüngliche Problem gab. – Thanos

Verwandte Themen