删除熊猫中每个列名称的第一个字符

时间:2019-01-29 16:40:20

标签: python pandas loops

以下代码有效:

print(ee.columns[0][1:])

但是当我将其推广到所有列时,代码将不起作用:

ee.columns = ee.columns.astype(str)
for i in range(0,len(ee.columns)-1):
    ee.columns[i] = ee.columns[i][1:]

我收到错误消息:“索引不支持可变操作”。

请注意,ee.columns类似于:enter image description here

4 个答案:

答案 0 :(得分:6)

您可以通过使用字符串访问器str并从第一个元素开始进行选择来轻松实现此目的:

df.columns = df.columns.str[1:]

答案 1 :(得分:0)

为什么不使用.rename()

ee.rename({c: c[1:] for c in ee.columns if c.startswith('M')}, axis='columns', inplace=True)

答案 2 :(得分:0)

由于您正在动态更新索引列表的内容而发生错误。原因是熊猫索引为immutable

ee.columns = [i[1:] for i in ee.columns]

答案 3 :(得分:0)

yatu答案的确非常好,因为它可以完美地回答您的答案,例如“我如何取出第一个字符”,但是如果您想要更强大的功能...

import pandas as pd

df = pd.DataFrame({
        'A0' : [1, 2],
        'A1' : [2, 2],
        'A2' : [3, 2],
        '3A' : [4, 2],
        'A4' : [5, 2],
        'A5' : [6, 2]

    })
print(df.head())
#    A0  A1  A2  3A  A4  A5
# 0   1   2   3   4   5   6
# 1   2   2   2   2   2   2

df.columns = df.columns.str.replace(r'^A', '')
print(df.head())
#    0  1  2  3A  4  5
# 0  1  2  3  4  5  6
# 1  2  2  2  2  2  2

如您所见,我使用正则表达式模式替换了您的列名,并使用了与第一个一样简单的技术。 ;)