ฉันจะเปลี่ยนชื่อคอลัมน์เฉพาะในแพนด้าได้อย่างไร
จาก v0.24 + เพื่อเปลี่ยนชื่อทีละหนึ่งคอลัมน์ (หรือมากกว่า)
หากคุณต้องการเปลี่ยนชื่อคอลัมน์ทั้งหมดในครั้งเดียว
DataFrame.set_axis()
axis=1
ด้วยวิธี ผ่านลำดับเหมือนรายการ ตัวเลือกที่มีอยู่สำหรับการปรับเปลี่ยนในสถานที่เช่นกัน
rename
กับ 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+ ตอนนี้คุณสามารถระบุaxis
พารามิเตอร์ด้วย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
ไม่ใช่ค่าเริ่มต้นแทนดังนั้นคุณจะต้องกำหนดผลลัพธ์คืน )
การเพิ่มนี้มีขึ้นเพื่อปรับปรุงความสอดคล้องกับส่วนที่เหลือของ API axis
อาร์กิวเมนต์ใหม่นั้นคล้ายคลึงกับcolumns
พารามิเตอร์ซึ่งทำในสิ่งเดียวกัน
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
ยอมรับการเรียกกลับที่ถูกเรียกหนึ่งครั้งสำหรับแต่ละคอลัมน์
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
สำหรับสถานการณ์เฉพาะนี้คุณต้องการใช้
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
คล้ายกับreplace
วิธีการของสตริงใน python ดัชนี pandas และ Series (object dtype เท่านั้น) กำหนดวิธี ("vectorized") str.replace
สำหรับการแทนที่สตริงและตาม regex
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
ข้อดีของการใช้วิธีนี้มากกว่าวิธีอื่นคือstr.replace
รองรับ regex (เปิดใช้งานโดยค่าเริ่มต้น) ดูเอกสารสำหรับข้อมูลเพิ่มเติม
ผ่านรายการไปset_axis
ด้วยaxis=1
โทรset_axis
ด้วยรายการส่วนหัว รายการต้องมีความยาวเท่ากับคอลัมน์ / ขนาดดัชนี set_axis
เปลี่ยนค่า DataFrame ดั้งเดิมตามค่าเริ่มต้น แต่คุณสามารถระบุinplace=False
เพื่อส่งคืนสำเนาที่แก้ไข
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
หมายเหตุ: ในรุ่นอนาคต inplace
True
จะเริ่มต้น
วิธีการผูกมัด
ทำไมต้องเลือกset_axis
เมื่อเรามีวิธีที่มีประสิทธิภาพในการกำหนดคอลัมน์ด้วยแล้วdf.columns = ...
? ตามที่แสดงโดย Ted Petrou ใน [คำตอบนี้], ( https://stackoverflow.com/a/46912050/4909087 ) set_axis
มีประโยชน์เมื่อพยายามเชื่อมโยงวิธีต่างๆ
เปรียบเทียบ
# new for pandas 0.21+
df.some_method1()
.some_method2()
.set_axis()
.some_method3()
กับ
# old way
df1 = df.some_method1()
.some_method2()
df1.columns = columns
df1.some_method3()
อดีตเป็นไวยากรณ์ที่เป็นธรรมชาติมากขึ้นและเป็นอิสระ