2016-06-29 6 views
5

Chciałbym wiedzieć, czy istnieje funkcja do zmiany konkretnych nazw kolumn, ale bez wybierania określonej nazwy lub bez zmiany ich wszystkich.Zmienianie nazw wielu kolumn, ale nie wszystkich z nich - Panda Python

mam kod:

df=df.rename(columns = {'nameofacolumn':'newname'}) 

Ale z nim muszę ręcznie zmienić każdą z nich pisemnie każdego imienia. także zmienić wszystkie z nich mam

df = df.columns['name1','name2','etc'] 

chciałbym mieć funkcję do zmiany kolumnach 1 i 3 bez zapisywania ich nazwy po prostu podając ich lokalizację. Dzięki!

+0

Możesz uzyskać dostęp do kolumn według indeksu, używając "df.columns [numer_indeksu]". –

Odpowiedz

4

Można użyć dict zrozumieniem i przekazać to do rename:

In [246]: 
df = pd.DataFrame(columns=list('abc')) 
new_cols=['d','e'] 
df.rename(columns=dict(zip(df.columns[1:], new_cols)),inplace=True) 
df 

Out[246]: 
Empty DataFrame 
Columns: [a, d, e] 
Index: [] 

Działa również jeśli przejdą listę pozycji porządkowych:

df.rename(columns=dict(zip(df.columns[[1,2]], new_cols)),inplace=True) 
1

powinieneś być w stanie odwołać się do kolumny według indeksu za pomocą ..df.columns [index]

>> temp = pd.DataFrame(np.random.randn(10, 5),columns=['a', 'b', 'c', 'd', 'e']) 
>> print(temp.columns[0]) 
    a 
>> print(temp.columns[1]) 
    b 

Więc do zmiany wartości poszczególnych kolumn, najpierw przypisać wartości do tablicy i zmienić tylko wartości, które chcesz

>> newcolumns=temp.columns.values 
>> newcolumns[0] = 'New_a' 

Przyporządkuj nową tablicę z powrotem do kolumny i będziesz miał co trzeba

>> temp.columns = newcolumns 
>> temp.columns 
>> print(temp.columns[0]) 
    New_a 
7

że masz słownika nowych nazw kolumn i nazwę kolumny powinny one zastąpić:

df.rename(columns={'old_col':'new_col', 'old_col_2':'new_col_2'}, inplace=True) 

Ale jeśli nie masz to i masz tylko indeksy, można zrób to:

column_indices = [1,4,5,6] 
new_names = ['a','b','c','d'] 
old_names = df.columns[column_indices] 
df.rename(columns=dict(zip(old_names, new_names)), inplace=True) 
+0

W moim pytaniu już umieściłem ten kod, ale powiedziałem, że nie było to, co chciałem, ponieważ nie chcę wybierać kolumn według nazwy, ale według pozycji. W każdym razie dzięki! –

+0

@ AntonioLópezRuiz - ah, rozumiem - myślę, że moja edycja odpowiada teraz na twoje pytanie. – mgoldwasser

+0

To prawda! Dzięki! –

1

Nie musisz w ogóle używać metody zmiany nazwy.

Po prostu zamieniasz stare nazwy kolumn na nowe używając list. Aby zmienić nazwę kolumny 1 i 3 (z indeksem 0 i 2), można zrobić coś takiego:

df.columns.values[[0, 2]] = ['newname0', 'newname2']

lub ewentualnie jeśli używasz starszej wersji pandy niż 0.16.0, robisz:

df.keys().values[[0, 2]] = ['newname0', 'newname2']

Zaletą tego podejścia jest to, że nie trzeba kopiować całej ramki danych za pomocą składni df = df.rename, wystarczy zmienić wartości indeksu.

Powiązane problemy