使用定制函数重命名dataframe中的列

ut6juiuv  于 2021-08-25  发布在  Java
关注(0)|答案(4)|浏览(366)

我有一个数据框,它的列名是'ah_ap'和'ah_as'。
基本上,我想做的就是交换下划线前的部分和下划线后的部分,这样列标题就是“ap_ah”和“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()

谢谢你的帮助。谢谢:)

byqmnocz

byqmnocz1#

您可以这样做:
输入:

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,我们可以再次将列表连接在一起。

ukxgm1gy

ukxgm1gy2#

你就快到了,你能行

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
mzillmmw

mzillmmw3#

另一个答案的替代方案。使用您的函数和 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)

elcex8rz

elcex8rz4#

str.replace 也是通过交换捕获组的一个选项:
从scottboston借用的示例输入

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

然后捕获“\u1”之前和之后的所有内容,并交换捕获组1和2。

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

相关问题