_x
Her 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?
_x
Her 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:
Bir list
anlayış kullanabilirsiniz :
df.columns = [str(col) + '_x' for col in df.columns]
Ayrıca gibi yöntemlerde-inşa edilir .add_suffix()
ve .add_prefix()
başka bir cevapta belirtildiği.
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.
inplace=True
parametre seçeneğinin olmaması ). Aksi takdirde mükemmel.
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-string
biç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 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, df
değ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
.
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)
new
veya old
) içeren sütunlar? Teşekkürler.
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')
df.columns = df.columns.astype(str) + '_x'
ilk yöntemimin gösterdiği gibi yapabilirsiniz .
Yukarıda önerilen bu çözümü görmedim, bu yüzden bunu listeye ekledim:
df.columns += '_x'
Ve önek senaryosuna kolayca uyum sağlayabilirsiniz.
df = pd.DataFrame([[1,2,3]]*10)
-> gibi bir RangeIndex ise değil df.columns
, o zamandf.add_suffix('_x')
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')
DataFrame.rename
.Eskimesi add_prefix
veadd_suffix
Pandalar gelecekteki sürümlerinde add_prefix
ve add_suffix
edilecektir 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ı rename
ile axis=1
ve 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)