【发布时间】:2019-06-22 20:35:18
【问题描述】:
以下代码有效:
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:]
我收到错误:“索引不支持可变操作”。
【问题讨论】:
以下代码有效:
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:]
我收到错误:“索引不支持可变操作”。
【问题讨论】:
您可以通过使用字符串访问器str 并从第一个元素开始选择来轻松地做到这一点:
df.columns = df.columns.str[1:]
【讨论】:
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
如您所见,我使用正则表达式模式替换了您的列名,并使用了与第一个一样简单的技术。 ;)
【讨论】:
为什么不使用.rename():
ee.rename({c: c[1:] for c in ee.columns if c.startswith('M')}, axis='columns', inplace=True)
【讨论】:
由于您即时更新索引列表的内容而发生错误。原因是熊猫索引是immutable。
ee.columns = [i[1:] for i in ee.columns]
【讨论】: