Mam ramkę danych o nazwie data
. Jak zmienić nazwę jedynego nagłówka kolumny? Na przykład, gdp
aby log(gdp)
?
data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
Odpowiedzi:
Program
rename
, w którym akceptuje dyktando jako parametr,columns
więc wystarczy przekazać dyktando jednym wpisem.Zobacz także powiązane
źródło
inplace
parametr, jeśli ignoruje ten parametr, to jest to błąd, czy możesz robić czasy z parametrem i bez niego, spróbuj także czegoś takiegonew_df = df.rename(columns={'new_name':'old_name'})
i zobacz, czy to jest szybszy czy nieinplace
parametru prawie podwoiło czas z 14 do 26 sekund. Ale 14 sekund to jeszcze sporo czasu na zmianę nagłówka…Znacznie szybszą implementacją byłoby użycie,
list-comprehension
jeśli chcesz zmienić nazwę pojedynczej kolumny.Jeśli zajdzie potrzeba zmiany nazwy wielu kolumn, użyj wyrażeń warunkowych, takich jak:
Lub skonstruować za pomocą mapowania
dictionary
i wykonaćlist-comprehension
z jegoget
pracy przez ustawienie wartości domyślnej, jak stare nazwy:Czasy:
źródło
pd.merge_asof()
ponieważ jest to wyrażenie :(.Od wersji 0.24 +, aby zmienić nazwę jednej (lub więcej) kolumn naraz,
DataFrame.rename()
zaxis=1
lubaxis='columns'
(axis
argument został wprowadzony wv0.21
.Index.str.replace()
do zamiany na podstawie ciągu / wyrażenia regularnego.Jeśli chcesz zmienić nazwę WSZYSTKICH kolumn naraz,
DataFrame.set_axis()
metoda zaxis=1
. Przekaż sekwencję podobną do listy. Dostępne są również opcje modyfikacji w miejscu.rename
zaxis=1
W wersji 0.21+ możesz teraz określić
axis
parametr za pomocąrename
:(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 docolumns
parametru - robią to samo.rename
akceptuje również wywołanie zwrotne, które jest wywoływane raz dla każdej kolumny.W tym konkretnym scenariuszu chciałbyś użyć
Index.str.replace
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.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ę.Uwaga: w przyszłych wersjach
inplace
będzie domyślnieTrue
.Tworzenie łańcuchów metod Po co
wybierać,
set_axis
skoro już mamy skuteczny sposób przypisywania kolumndf.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ć
Przeciw
Pierwsza jest bardziej naturalną i swobodną składnią.
źródło
Istnieje co najmniej pięć różnych sposobów zmiany nazw określonych kolumn w pandach. Wymieniłem je poniżej wraz z linkami do oryginalnych odpowiedzi. Zmierzyłem również czas tych metod i stwierdziłem, że działają mniej więcej tak samo (chociaż YMMV w zależności od zestawu danych i scenariusza). Poniższy przypadek testowy polega na zmianie nazw kolumn
A
M
N
Z
naA2
M2
N2
Z2
w ramce danych z kolumnamiA
naZ
miliony wierszy.Wynik:
Skorzystaj z metody, która jest dla Ciebie najbardziej intuicyjna i najłatwiejsza do wdrożenia w Twojej aplikacji.
źródło