Pandalarda belirli bir sütunu nasıl yeniden adlandırabilirim?
V0.24 + 'dan, aynı anda bir (veya daha fazla) sütunu yeniden adlandırmak için,
TÜM sütunları bir defada yeniden adlandırmanız gerekirse,
DataFrame.set_axis()
yöntemi ile axis=1
. Liste benzeri bir sıra iletin. Yerinde değişiklik için de seçenekler mevcuttur.
rename
ile axis=1
df = pd.DataFrame('x', columns=['y', 'gdp', 'cap'], index=range(5))
df
y gdp cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
0.21+ ile artık aşağıdakileri axis
içeren bir parametre belirleyebilirsiniz rename
:
df.rename({'gdp':'log(gdp)'}, axis=1)
# df.rename({'gdp':'log(gdp)'}, axis='columns')
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
( rename
Varsayılan olarak yerinde olmadığına dikkat edin, bu nedenle sonucu tekrar atamanız gerekir .)
Bu ekleme, API'nın geri kalanıyla tutarlılığı artırmak için yapılmıştır. Yeni axis
argüman columns
parametreye benzer - aynı şeyi yaparlar.
df.rename(columns={'gdp': 'log(gdp)'})
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
rename
ayrıca her sütun için bir kez çağrılan bir geri çağrıyı kabul eder.
df.rename(lambda x: x[0], axis=1)
# df.rename(lambda x: x[0], axis='columns')
y g c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Bu özel senaryo için şunu kullanmak istersiniz:
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
replace
Python'daki dizeler yöntemine benzer şekilde , pandalar Dizin ve Serileri (yalnızca nesne türü) str.replace
, dize ve normal ifade tabanlı değiştirme için bir ("vektörize") yöntem tanımlar .
df.columns = df.columns.str.replace('gdp', 'log(gdp)')
df
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Bunun diğer yöntemlere göre avantajı str.replace
regex'i desteklemesidir (varsayılan olarak etkindir). Daha fazla bilgi için dokümanlara bakın.
Bir liste geçirilmesi set_axis
ileaxis=1
set_axis
Başlık listesi ile arayın . Liste, sütun / dizin boyutuna eşit olmalıdır. set_axis
orijinal DataFrame'i varsayılan olarak değiştirir, ancak inplace=False
değiştirilmiş bir kopyayı döndürmeyi belirtebilirsiniz .
df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)
# df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)
cap log(gdp) y
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Not: Gelecek sürümlerde inplace
varsayılan olarak True
.
Yöntem Zinciri
Neden set_axis
sütun atamanın etkili bir yolunu seçtiğimizi neden seçmelisiniz df.columns = ...
? Ted Petrou tarafından [bu cevap] 'da gösterildiği gibi, ( https://stackoverflow.com/a/46912050/4909087 ) set_axis
yöntemleri zincirlemeye çalışırken kullanışlıdır.
Karşılaştırmak
# new for pandas 0.21+
df.some_method1()
.some_method2()
.set_axis()
.some_method3()
Karşı
# old way
df1 = df.some_method1()
.some_method2()
df1.columns = columns
df1.some_method3()
Birincisi daha doğal ve serbest akan sözdizimidir.