Jak zmienić nazwę określonej kolumny w pandach?
Od wersji 0.24 +, aby zmienić nazwę jednej (lub więcej) kolumn naraz,
Jeśli chcesz zmienić nazwę WSZYSTKICH kolumn naraz,
DataFrame.set_axis()
metoda z axis=1
. Przekaż sekwencję podobną do listy. Dostępne są również opcje modyfikacji w miejscu.
rename
z axis=1
df = pd.DataFrame('x', columns=['y', 'gdp', 'cap'], index=range(5))
df
y gdp cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
W wersji 0.21+ możesz teraz określić axis
parametr za pomocą rename
:
df.rename({'gdp':'log(gdp)'}, axis=1)
# df.rename({'gdp':'log(gdp)'}, axis='columns')
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
(Zauważ, że rename
domyślnie nie jest to miejsce na miejscu, więc będziesz musiał przypisać wynik z powrotem ).
Ten dodatek został wprowadzony w celu poprawy spójności z resztą interfejsu API. Nowy axis
argument jest analogiczny do columns
parametru - robią to samo.
df.rename(columns={'gdp': 'log(gdp)'})
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
rename
akceptuje również wywołanie zwrotne, które jest wywoływane raz dla każdej kolumny.
df.rename(lambda x: x[0], axis=1)
# df.rename(lambda x: x[0], axis='columns')
y g c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
W tym konkretnym scenariuszu chciałbyś użyć
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
Podobnie jak w przypadku replace
metody łańcuchów znaków w Pythonie, indeks i serie pand (tylko typ obiektu) definiują (zwektoryzowaną) str.replace
metodę zastępowania ciągów i wyrażeń regularnych.
df.columns = df.columns.str.replace('gdp', 'log(gdp)')
df
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Zaletą tego w porównaniu z innymi metodami jest str.replace
obsługa wyrażeń regularnych (domyślnie włączona). Więcej informacji można znaleźć w dokumentacji.
Przekazywanie listy do set_axis
zaxis=1
Zadzwoń set_axis
z listą nagłówków. Lista musi mieć taką samą długość jak kolumny / rozmiar indeksu. set_axis
mutuje oryginalną ramkę DataFrame domyślnie, ale można określić, inplace=False
aby zwrócić zmodyfikowaną kopię.
df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)
# df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)
cap log(gdp) y
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Uwaga: w przyszłych wersjach inplace
będzie domyślnie True
.
Tworzenie łańcuchów metod Po co
wybierać, set_axis
skoro już mamy skuteczny sposób przypisywania kolumn df.columns = ...
? Jak pokazuje Ted Petrou w [ta odpowiedź], ( https://stackoverflow.com/a/46912050/4909087 )set_axis
jest przydatne podczas próby łączenia metod w łańcuch.
Porównać
# new for pandas 0.21+
df.some_method1()
.some_method2()
.set_axis()
.some_method3()
Przeciw
# old way
df1 = df.some_method1()
.some_method2()
df1.columns = columns
df1.some_method3()
Pierwsza jest bardziej naturalną i swobodną składnią.