Pandalar DataFrame'de belirli bir sütun adını değiştirme


200

Belirtilen sütun adını bir DataFrame.

verileri oynat ...

import pandas as pd
d = {
         'one': [1, 2, 3, 4, 5],
         'two': [9, 8, 7, 6, 5],
         'three': ['a', 'b', 'c', 'd', 'e']
    }
df = pd.DataFrame(d)

Şimdiye kadar bulduğum en zarif çözüm ...

names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names

Basit bir tek satırlık umuyordum ... bu girişim başarısız oldu ...

df.columns[df.columns.tolist().index('one')] = 'another_name'

Herhangi bir ipucu minnetle alındı.

Yanıtlar:


368

Tek astar var:

In [27]: df=df.rename(columns = {'two':'new_name'})

In [28]: df
Out[28]: 
  one three  new_name
0    1     a         9
1    2     b         8
2    3     c         7
3    4     d         6
4    5     e         5

renameYöntem için dokümanlar aşağıdadır .

Tanım: df.rename (self, index = None, column = None, copy = True, inplace = False)
Doküman:
Giriş işlevini kullanarak dizini ve / veya sütunları değiştirin veya
fonksiyonlar. İşlev / dikte değerleri benzersiz olmalıdır (1'e 1). Etiketler değil
bir diktede yer alan / Seriler olduğu gibi bırakılacaktır.

Parametreler
----------
dizin: dikte benzeri veya işlev, isteğe bağlı
    Dizin değerlerine uygulanacak dönüşüm
sütunlar: dikte benzeri veya işlev, isteğe bağlı
    Sütun değerlerine uygulanacak dönüşüm
copy: boole, varsayılan True
    Ayrıca temel verileri kopyalayın
inplace: boolean, varsayılan False
    Yeni bir DataFrame döndürülüp döndürülmeyeceği. True ise, kopyanın değeri
    yok sayıldı.

Ayrıca bakınız
--------
Series.rename

İadeler
-------
yeniden adlandırıldı: DataFrame (yeni nesne)

@ Jeong-Yoon Lee yanıtında gösterildiği gibi inplace = True kullanmadığım sürece bu benim için işe yaramaz.
JStrahl

111

Yana inplaceargüman kullanılabilir, kopyalamak ve kendisine özgün veri çerçevesi geri atamanız gerekir, ancak aşağıdaki gibi yapmayın:

df.rename(columns={'two':'new_name'}, inplace=True)

42

Ne dersin?

df.columns.values[2] = "new_name"

12
sütun adını daha sonra df ['new_name'] gibi diğer işlemlerde kullanırsanız aslında bu işe yaramaz
Master Yogurt

4
bu cevap, belirli bir sütunu yeni bir isimle değiştirmem için faydalı oldu. 1. sütun dizin 0, 2. sütun dizin 1, vb. güzel bir çözüm .. ve eminim ki bu daha fazla insana yardımcı olacaktır .. çünkü diğer çözümler orijinal sütun adlarını önceden bilmenizi ve kopyalamanızı gerektirir .... bu hızlı ve kirli bir yöntemdir .. kendi kullanımları vardır.
ihightower

2
@MasterYogurt yorumunuz doğru değil. df['new_name']Yukarıda belirtildiği gibi değişkenleri değiştirdikten sonra (ve diğer pandaları) gerçekleştirmek mümkündür . Yorumunuz ilk yayınlandığı zaman geçerli olabilir.
Jacob H

1
Bununla birlikte, renameyöntemleri kullanmak daha iyi bir çözümdür.
Jacob H

@JacobH Pandas v1.0.3 ile hala bu sorunla karşılaşıyorum
Philipp

7

Pandas 0.21 artık bir eksen parametresine sahip

Yeniden adlandırma yöntemi, Pandalar API'sinin geri kalanının çoğuyla eşleşecek bir eksen parametresi elde etti.

Buna ek olarak:

df.rename(columns = {'two':'new_name'})

Yapabilirsin:

df.rename({'two':'new_name'}, axis=1)

veya

df.rename({'two':'new_name'}, axis='columns')

df.rename ({'two': 'new_name'}, axis = 'column') TypeError atar: Hem 'eksen' hem de 'dizin' veya 'sütunlardan' herhangi biri belirtilemez.
HereHere

@ HereHere Pandalar 0.21 sürümünü kullandığınızdan emin olun. Do pd.__version__sürümünüzü kontrol etmek
Ted Petrou

6

Hangi sütunun # olduğunu biliyorsanız (birinci / ikinci / nth), benzer bir soruda yayınlanan bu çözüm, adlandırılmış veya adlandırılmamış olup olmadığına bakılmaksızın ve tek satırda çalışır: https://stackoverflow.com/a/26336314/ 4355695

df.rename(columns = {list(df)[1]:'new_name'}, inplace=True)
# 1 is for second column (0,1,2..)

4

Buradaki sütunları yeniden adlandırmak için, hem Default(0,1,2,etc;)mevcut sütunlar için hem de mevcut sütunlar için işe yarayacak, ancak daha büyük veri kümeleri için (birçok sütuna sahip) pek kullanışlı olmayacak olan basittir .

Daha büyük bir veri kümesi için ihtiyacımız olan sütunları dilimleyebilir ve aşağıdaki kodu uygulayabiliriz:

df.columns = ['new_name','new_name1','old_name']

3

Aşağıdaki kısa kod yardımcı olabilir:

df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns})

Sütunlardan boşlukları kaldırın.


Ben elde tutulan AttributeError: 'int' object has no attribute 'replace'o konuda genişletebilecek.
Nirmal

3

pandalar sürüm 0.23.4

df.rename(index=str,columns={'old_name':'new_name'},inplace=True)

Kayıt için:

indeks = str'nin çıkarılması hata verir değiştir, beklenmeyen bir 'sütunlar' argümanı içerir


2

Başka bir seçenek de sütunu kopyalayıp bırakmaktır :

df = pd.DataFrame(d)
df['new_name'] = df['two']
df = df.drop('two', axis=1)
df.head()

Bundan sonra sonucu alırsınız:

    one three   new_name
0   1   a       9
1   2   b       8
2   3   c       7
3   4   d       6
4   5   e       5

2
Bu yöntem, sütun dizinlerinin sırasının önemli olması durumunda yardımcı olmayacaktır. Sonunda yeni sütun oluşturulacaktır.
Loochie

0

size = 10
df.rename(columns={df.columns[i]: someList[i] for i in range(size)}, inplace = True)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.