Làm cách nào để đổi tên một cột cụ thể trong gấu trúc?
Từ v0.24 +, để đổi tên một (hoặc nhiều) cột cùng một lúc,
Nếu bạn cần đổi tên TẤT CẢ các cột cùng một lúc,
DataFrame.set_axis()phương pháp với axis=1. Vượt qua một chuỗi giống như danh sách. Tùy chọn có sẵn để sửa đổi tại chỗ là tốt.
rename với 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
Với 0,21+, giờ đây bạn có thể chỉ định một axistham số với 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
(Lưu ý rằng renamekhông phải tại chỗ theo mặc định, vì vậy bạn sẽ cần gán lại kết quả .)
Sự bổ sung này đã được thực hiện để cải thiện tính nhất quán với phần còn lại của API. Đối axissố mới tương tự như columnstham số, họ làm điều tương tự.
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 cũng chấp nhận một cuộc gọi lại được gọi một lần cho mỗi cột.
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
Đối với kịch bản cụ thể này, bạn sẽ muốn sử dụng
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
Tương tự như replacephương thức chuỗi trong python, pandas Index và Series (chỉ đối tượng dtype) xác định str.replacephương thức ("vectorized") để thay thế dựa trên chuỗi và 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
Ưu điểm của phương thức này so với các phương thức khác là str.replacehỗ trợ regex (được bật theo mặc định). Xem tài liệu để biết thêm thông tin.
Vượt qua một danh sách set_axisvớiaxis=1
Gọi set_axisvới một danh sách (các) tiêu đề. Danh sách phải có độ dài bằng với kích thước cột / chỉ mục. set_axisthay đổi DataFrame gốc theo mặc định, nhưng bạn có thể chỉ định inplace=Falsetrả về một bản sao đã sửa đổi.
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
Lưu ý: Trong các bản phát hành trong tương lai, inplacesẽ mặc định là True.
Chuỗi phương pháp
Tại sao chọn set_axiskhi chúng ta đã có cách gán cột hiệu quả df.columns = ...? Như được hiển thị bởi Ted Petrou trong [câu trả lời này], ( https://stackoverflow.com/a/46912050/4909087 ) set_axisrất hữu ích khi cố gắng xâu chuỗi các phương thức.
Đối chiếu
# new for pandas 0.21+
df.some_method1()
.some_method2()
.set_axis()
.some_method3()
Đấu với
# old way
df1 = df.some_method1()
.some_method2()
df1.columns = columns
df1.some_method3()
Các cựu là cú pháp chảy tự nhiên và tự do hơn.