我的数据框:
X Y 123_Z 1234_Z 123_Z_R 1234_Z_R
. . . . . .
. . . . . .
我想通过切换数字和字母来重命名数据中的列。
预期结果:
X Y Z_123 Z_1234 Z_R_123 Z_R_1234
. . . . . .
. . . . . .
注意:我有很多没有数字和数字的列。因此,我试图避免手动进行操作。
答案 0 :(得分:3)
也许可行
df.columns = map(lambda s: '_'.join(s[1:] + [s[0]]) if s[0].isdigit() else '_'.join(s), df.columns.str.split('_'))
Columns: ['X', 'Y', 'X_Y', 'Z_123', 'Z_1234', 'Z_R_123', 'Z_R_1234']
答案 1 :(得分:3)
map
和reversed
df.columns = ['_'.join(reversed(x.split('_', 1))) for x in df.columns]
df
X Y Z_123 Z_1234 Z_R_123 Z_R_1234
0 . . . . . .
1 . . . . . .
rename
df.rename(columns=lambda x: '_'.join(reversed(x.split('_', 1))))
X Y Z_123 Z_1234 Z_R_123 Z_R_1234
0 . . . . . .
1 . . . . . .
使用re
进行正则表达式拆分
import re
# regex lookbehind
# to check if underscore
# is preceded by a digit
# ?
df.rename(columns=lambda x: '_'.join(reversed(re.split('(?<=\d)_', x, 1))))
X Y Z_123 Z_1234 Z_R_123 Z_R_1234
0 . . . . . .
1 . . . . . .