使用自定义函数python-panda重命名数据帧中的列



我有一个数据帧,其列名类似于"AH_AP"one_answers"AH_AS"。

本质上,我只想交换下划线之前的部分和下划线之后的部分,这样列标题就是"AP_AH"one_answers"AS_AH"。

如果元素在列表中,我可以这样做,但我不知道如何将其应用于列名。

如果它是一个列表,我的解决方案如下:

columns = ['AH_AP','AS_AS']
def rejig_col_names():
elements_of_header = columns.split('_')
new_title = elements_of_header[-1] + "_" + elements_of_header[0]
return new_title

我想我需要将其应用于以下内容,但我不知道如何或如何引用df.columns:中的单个列

df.columns = df.columns.map()

感谢您的帮助。谢谢:(

您可以这样做:

输入:

df = pd.DataFrame(data=[['1','2'], ['3','4']], columns=['AH_PH', 'AH_AS'])
print(df)  
AH_PH AH_AS
0     1     2
1     3     4

输出:

df.columns = df.columns.str.split('_').str[::-1].str.join('_')
print(df)
PH_AH AS_AH
0     1     2
1     3     4

解释:

  • 在'_'上使用字符串访问器和拆分方法

  • 然后使用带有索引切片反转的str访问器[::-1]可以颠倒列表的顺序

  • 最后,使用字符串访问器和join,我们可以连接再次列出。

你几乎做到了:你可以进行

df.columns = df.columns.map(rejig_col_names)

除了用列名作为参数来调用函数之外,请这样更改它:

def rejig_col_names(col_name):
elements_of_header = col_name.split('_')
new_title = elements_of_header[-1] + "_" + elements_of_header[0]
return new_title

另一个答案的替代方案。使用您的功能和DataFrame.rename

import pandas as pd

def rejig_col_names(columns):
elements_of_header = columns.split('_')
new_title = elements_of_header[-1] + "_" + elements_of_header[0]
return new_title

data = {
'A_B': [1, 2, 3],
'C_D': [4, 5, 6],
}
df = pd.DataFrame(data)
df.rename(rejig_col_names, axis='columns', inplace=True)
print(df)

str.replace也是通过交换捕获组的一个选项:

从ScottBoston 借来的样本输入

df = pd.DataFrame(data=[['1', '2'], ['3', '4']], columns=['AH_PH', 'AH_AS'])

然后捕获"_"之前和之后的所有内容,并交换捕获组1和2。

df.columns = df.columns.str.replace(r'^(.*)_(.*)$', r'2_1', regex=True)
PH_AH AS_AH
0     1     2
1     3     4

最新更新