Her sütun adına bir sonek (veya önek) nasıl eklenir?


89

_xHer sütun adına şu şekilde sonek eklemek istiyorum:

featuresA = myPandasDataFrame.columns.values + '_x'

Bunu nasıl yaparım? Ayrıca ek olarak eklemek istersem x_çözüm nasıl değişirdi?

Yanıtlar:



165

Bence son eki eklemenin en güzel yolu şudur.

df = df.add_suffix('_some_suffix')

DataFrame'de çağrılan ve DataFrame'i döndüren bir işlev olduğu için - bunu çağrı zincirinde kullanabilirsiniz.


14
Adlara bir önek eklemek isterseniz add_prefix kullanabilirsiniz.
Jorge

9
Ne yazık ki bu değiştirilebilir olamaz (yani bir inplace=Trueparametre seçeneğinin olmaması ). Aksi takdirde mükemmel.
ijoseph

Bunun bazı durumlarda kabul edilen cevaptan daha iyi olduğunu düşünüyorum, çünkü kendi ifadesine ihtiyaç duymak yerine tek bir ifadede bir işlem zincirinde kullanılabilir.
Kaptan Lepton

@CaptainLepton zaman olmaz Bu cevap daha iyi kabul cevap daha olacak
BAXX

1
Sonek sabit değilse. Başlık, soneklerden bahsediyor. Gönderi, kapsamı tek bir sabit sonek olarak daraltır, ancak gönderi başlığını genel terimlerle yanıtlıyorsak, sütunları bir liste anlayışı veya diğer yinelenebilir yöntemlerle ayarlamak daha esnektir
Kaptan Lepton

18

Zarif Yerinde Birleştirme

Yerinde değişiklik yapmaya çalışıyorsanız df, en ucuz (ve en basit) seçenek doğrudan yerinde eklemedir df.columns(yani kullanarak Index.__iadd__).

df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
df

   A   B
0  9  12
1  4   7
2  2   5
3  1   4

df.columns += '_some_suffix'
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

Bir önek eklemek için benzer şekilde kullanırsınız

df.columns = 'some_prefix_' + df.columns
df

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

Diğer bir ucuz seçenek, f-stringbiçimlendirmeli bir liste anlama kullanmaktır (python3.6 + 'da mevcuttur).

df.columns = [f'{c}_some_suffix' for c in df]
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

Önek için de benzer şekilde,

df.columns = [f'some_prefix{c}' for c in df]

Yöntem Zincirleme

Yöntem zincirleme sırasında * düzeltmeleri eklemek de mümkündür. Bir sonek eklemek için kullanınDataFrame.add_suffix

df.add_suffix('_some_suffix')

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

Bu , verilerin bir kopyasını döndürür . IOW, dfdeğiştirilmez.

Öneklerin eklenmesi de ile yapılır DataFrame.add_prefix.

df.add_prefix('some_prefix_')

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

Bu da değişmez df.


Eleştirisi add_*fix

Yöntem zincirleme yapmaya çalışıyorsanız, bunlar iyi yöntemlerdir:

df.some_method1().some_method2().add_*fix(...)

Ancak, add_prefix(ve add_suffix) yalnızca başlıkları değiştirmek için tüm veri çerçevesinin bir kopyasını oluşturur . Bu savurgan, ama yine de zincire istiyor inanıyorsanız, çağırabilirsiniz pipe:

def add_suffix(df):
    df.columns += '_some_suffix'
    return df

df.some_method1().some_method2().pipe(add_suffix)

Bu zarif! Ya sütunların bir alt kümesine önek veya sonek eklemek isterseniz, örneğin adlarının tümü her sütun yerine ortak bir kelime (gibi newveya old) içeren sütunlar? Teşekkürler.
Bowen Liu

1
@BowenLiu Bunun yerine df.rename () ile gitmeyi öneririm ... Yeni adlarına bir sözlük eşleme adları geçirin. Ardından, axis = 1 ile yeniden adlandırmayı çağırın. Koşullu liste anlama atamasını da kullanabilirsiniz.
cs95

Sütunlarınız örneğin df = pd.DataFrame([[1,2,3]]*10)-> gibi bir RangeIndex ise, yalnızca sütun adları olarak normal veri türleriyle çalışır df.columns, o zamandf.add_suffix('_x')
questionto42

df.columns = df.columns.astype(str) + '_x' ilk yöntemimin gösterdiği gibi yapabilirsiniz .
cs95

4

Yukarıda önerilen bu çözümü görmedim, bu yüzden bunu listeye ekledim:

df.columns += '_x'

Ve önek senaryosuna kolayca uyum sağlayabilirsiniz.


Elbette önek olarak kullanılamasa da sonek için en iyi çözüm.
questionto42

Yalnızca sütun adlarındaki normal veri türleriyle çalışır, sütunlarınız örneğin df = pd.DataFrame([[1,2,3]]*10)-> gibi bir RangeIndex ise değil df.columns, o zamandf.add_suffix('_x')
questionto42

1

Sütun adlarınıza son ek (veya ön ek) eklemenin 4 yolunu biliyorum:

1- df.columns = [str(col) + '_some_suffix' for col in df.columns]

veya

2- df.rename(columns= lambda col: col+'_some_suffix')

veya

3- df.columns += '_some_suffix'çok kolay.

veya en iyisi:

3- df.add_suffix('_some_suffix')


0

Kullanarak DataFrame.rename.

Eskimesi add_prefixveadd_suffix

Pandalar gelecekteki sürümlerinde add_prefixve add_suffixedilecektir kaldırılmış . Yeni önerilen yöntem DataFrame.renameşunları kullanmaktır :

df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
   A  B
0  0  4
1  1  5
2  2  6

Kullanımı renameile axis=1ve dize biçimlendirme:

df.rename('col_{}'.format, axis=1)
# or df.rename(columns='col_{}'.format)

   col_A  col_B
0      0      4
1      1      5
2      2      6

Aslında sütun adlarınızın üzerine yazmak için, döndürülen değerleri şunlara atayabiliriz df:

df = df.rename('col_{}'.format, axis=1)

veya şunu kullanın inplace=True:

df.rename('col_{}'.format, axis=1, 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.