Έχω ένα DataFrame που χρησιμοποιεί pandas και ετικέτες στηλών που πρέπει να επεξεργαστώ για να αντικαταστήσω τις αρχικές ετικέτες στηλών.
Θα ήθελα να αλλάξω τα ονόματα των στηλών σε ένα DataFrame A
όπου βρίσκονται τα αρχικά ονόματα των στηλών:
['$a', '$b', '$c', '$d', '$e']
σε
['a', 'b', 'c', 'd', 'e'].
Έχω τα επεξεργασμένα ονόματα στηλών αποθηκευμένα σε μια λίστα, αλλά δεν ξέρω πώς να αντικαταστήσω τα ονόματα των στηλών.
Χρησιμοποιήστε τη συνάρτηση df.rename()
και αναφερθείτε στις στήλες που θέλετε να μετονομάσετε. Δεν χρειάζεται να μετονομαστούν όλες οι στήλες:
df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# Or rename the existing DataFrame (rather than creating a copy)
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)
Ελάχιστο παράδειγμα κώδικα
df = pd.DataFrame('x', index=range(3), columns=list('abcde'))
df
a b c d e
0 x x x x x
1 x x x x x
2 x x x x x
Οι ακόλουθες μέθοδοι λειτουργούν όλες και παράγουν την ίδια έξοδο:
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis=1) # new method
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis='columns')
df2 = df.rename(columns={'a': 'X', 'b': 'Y'}) # old method
df2
X Y c d e
0 x x x x x
1 x x x x x
2 x x x x x
Θυμηθείτε να αναθέσετε το αποτέλεσμα πίσω, καθώς η τροποποίηση δεν είναι not-inplace. Εναλλακτικά, καθορίστε inplace=True
:
df.rename({'a': 'X', 'b': 'Y'}, axis=1, inplace=True)
df
X Y c d e
0 x x x x x
1 x x x x x
2 x x x x x
Από την έκδοση v0.25, μπορείτε επίσης να καθορίσετε errors='raise'
για την εμφάνιση σφαλμάτων αν καθοριστεί μια μη έγκυρη στήλη προς μετονομασία. Δείτε v0.25 rename()
docs.
Χρησιμοποιήστε df.set_axis()
με axis=1
και inplace=False
(για να επιστρέψετε ένα αντίγραφο).
df2 = df.set_axis(['V', 'W', 'X', 'Y', 'Z'], axis=1, inplace=False)
df2
V W X Y Z
0 x x x x x
1 x x x x x
2 x x x x x
Αυτό επιστρέφει ένα αντίγραφο, αλλά μπορείτε να τροποποιήσετε το DataFrame in-place θέτοντας inplace=True
(αυτή είναι η προεπιλεγμένη συμπεριφορά για τις εκδόσεις <=0.24 αλλά είναι πιθανό να αλλάξει στο μέλλον).
Μπορείτε επίσης να εκχωρήσετε κεφαλίδες απευθείας:
df.columns = ['V', 'W', 'X', 'Y', 'Z']
df
V W X Y Z
0 x x x x x
1 x x x x x
2 x x x x x
Η μέθοδος rename
μπορεί να λάβει μια συνάρτηση, για παράδειγμα:
In [11]: df.columns
Out[11]: Index([u'$a', u'$b', u'$c', u'$d', u'$e'], dtype=object)
In [12]: df.rename(columns=lambda x: x[1:], inplace=True)
In [13]: df.columns
Out[13]: Index([u'a', u'b', u'c', u'd', u'e'], dtype=object)