如何在Python(Pandas)中重命名特定范围的列?

4
 KOAK.rename(columns = lambda x : 'KOAK-' + x, inplace=True)

以上代码使我能够在数据框的所有列标题前添加“KOAK”,但我只想将KOAK前缀添加到第4-38列。我该如何做?


这些列号是名称还是序数位置? - EdChum
他们是位置,不是名称。 - PrimeMet
2个回答

3
您可以将内容分配给
KOAK.columns = ['KOAK-' + x if 4 <= i <= 38 else x for i, x in enumerate(KOAK.columns, 1)]

例子:

KOAK = pd.DataFrame(dict.fromkeys('ABCDEFG', [12]))
KOAK.columns = ['KOAK-' + x if 2 <= i <= 4 else x 
                for i, x in enumerate(KOAK.columns, 1)]
print(KOAK)

输出:

    A  KOAK-B  KOAK-C  KOAK-D   E   F   G
0  12      12      12      12  12  12  12

如果列名是整数,那么在 OP 的情况下,您不需要将 x 转换为 str 吗? - EdChum
x in KOAK.columnsзҡ„иҝ”еӣһеҖјжҳҜеӯ—з¬ҰдёІгҖӮ - Mike Müller
谢谢!这正是我所需要的。 - PrimeMet
不一定,列名可以是整数:df = pd.DataFrame(columns=[0,1,2,3,4]) 然后 df.columns.tolist() 返回:[0, 1, 2, 3, 4] - EdChum
好的,OP在lambda函数中执行'KOAK-' + x - Mike Müller

2
你可以通过将列序号范围与列表推导式压缩并将其传递给rename来创建一个字典:
In [2]:
df = pd.DataFrame(columns=list('abcdefg'))
df

Out[2]:
Empty DataFrame
Columns: [a, b, c, d, e, f, g]
Index: []

In [3]:
new_cols = dict(zip(df.columns[2:5], ['KOAK-' + x for x in df.columns[2:5]]))
new_cols

Out[3]:
{'c': 'KOAK-c', 'd': 'KOAK-d', 'e': 'KOAK-e'}

In [6]:    
df.rename(columns= new_cols, inplace=True)
df

Out[6]:
Empty DataFrame
Columns: [a, b, KOAK-c, KOAK-d, KOAK-e, f, g]
Index: []

所以在您的情况下,以下内容应该可以正常工作:

new_cols = dict(zip(df.columns[3:47], ['KOAK-' + str(x) for x in df.columns[3:47]]))
df.rename(columns= new_cols, inplace=True)

这个答案也帮我得到了想要的东西。谢谢你。 - PrimeMet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接