Tôi muốn thêm _x
hậu tố vào mỗi tên cột như sau:
featuresA = myPandasDataFrame.columns.values + '_x'
Làm thế nào để tôi làm điều này? Ngoài ra, nếu tôi muốn thêm x_
làm hậu tố, giải pháp sẽ thay đổi như thế nào?
Tôi muốn thêm _x
hậu tố vào mỗi tên cột như sau:
featuresA = myPandasDataFrame.columns.values + '_x'
Làm thế nào để tôi làm điều này? Ngoài ra, nếu tôi muốn thêm x_
làm hậu tố, giải pháp sẽ thay đổi như thế nào?
Câu trả lời:
Bạn có thể sử dụng một list
cách hiểu:
df.columns = [str(col) + '_x' for col in df.columns]
Ngoài ra còn có các phương thức tích hợp như .add_suffix()
và .add_prefix()
như đã đề cập trong một câu trả lời khác.
Sau đây là cách tốt nhất để thêm hậu tố theo ý kiến của tôi.
df = df.add_suffix('_some_suffix')
Vì nó là một hàm được gọi trên DataFrame và trả về DataFrame - bạn có thể sử dụng nó trong chuỗi các cuộc gọi.
inplace=True
tùy chọn tham số). Nếu không, hoàn hảo.
Nếu bạn đang cố gắng sửa đổi df
tại chỗ, thì tùy chọn rẻ nhất (và đơn giản nhất) là bổ sung tại chỗ trực tiếp trên df.columns
(tức là sử dụng 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
Để thêm tiền tố, bạn cũng sẽ sử dụng
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
Một lựa chọn rẻ tiền khác là sử dụng tính năng hiểu danh sách với f-string
định dạng (có sẵn trên python3.6 +).
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
Và đối với tiền tố, tương tự,
df.columns = [f'some_prefix{c}' for c in df]
Cũng có thể thực hiện thêm * sửa chữa trong khi chuỗi phương thức. Để thêm hậu tố, hãy sử dụngDataFrame.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
Điều này trả về một bản sao của dữ liệu. IOW, df
không được sửa đổi.
Thêm tiền tố cũng được thực hiện với 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
Mà cũng không sửa đổi df
.
add_*fix
Đây là những phương pháp tốt nếu bạn đang cố gắng thực hiện chuỗi phương thức:
df.some_method1().some_method2().add_*fix(...)
Tuy nhiên, add_prefix
(và add_suffix
) tạo một bản sao của toàn bộ khung dữ liệu, chỉ để sửa đổi các tiêu đề. Nếu bạn tin rằng điều này là lãng phí, nhưng vẫn muốn chuỗi, bạn có thể gọi pipe
:
def add_suffix(df):
df.columns += '_some_suffix'
return df
df.some_method1().some_method2().pipe(add_suffix)
new
hoặc old
) thay vì mỗi cột? Cảm ơn.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, thì bạn sẽ sử dụngdf.add_suffix('_x')
df.columns = df.columns.astype(str) + '_x'
như phương pháp đầu tiên của tôi cho thấy.
Tôi chưa thấy giải pháp này được đề xuất ở trên, vì vậy hãy thêm giải pháp này vào danh sách:
df.columns += '_x'
Và bạn có thể dễ dàng thích ứng với kịch bản tiền tố.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, thì bạn sẽ sử dụngdf.add_suffix('_x')
Tôi biết 4 cách để thêm hậu tố (hoặc tiền tố) vào tên cột của bạn:
1- df.columns = [str(col) + '_some_suffix' for col in df.columns]
hoặc là
2- df.rename(columns= lambda col: col+'_some_suffix')
hoặc là
3- df.columns += '_some_suffix'
nhiều kỳ lạ.
hoặc đẹp nhất:
3- df.add_suffix('_some_suffix')
DataFrame.rename
.Ngừng sử dụng add_prefix
vàadd_suffix
Trong các phiên bản gấu trúc trong tương lai add_prefix
và add_suffix
sẽ không được dùng nữa . Phương pháp mới được khuyên là sử dụng DataFrame.rename
:
df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
A B
0 0 4
1 1 5
2 2 6
Sử dụng định dạng rename
với axis=1
và chuỗi:
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
Để thực sự ghi đè lên tên cột của bạn, chúng tôi có thể gán các giá trị trả về cho df
:
df = df.rename('col_{}'.format, axis=1)
hoặc sử dụng inplace=True
:
df.rename('col_{}'.format, axis=1, inplace=True)