Tôi muốn thêm _xhậ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 _xhậ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 listcá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=Truetùy chọn tham số). Nếu không, hoàn hảo.
Nếu bạn đang cố gắng sửa đổi dftạ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, dfkhô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)
newhoặ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_prefixvàadd_suffix
Trong các phiên bản gấu trúc trong tương lai add_prefixvà add_suffixsẽ 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 renamevới axis=1và 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)