我试图清理数据帧中的列名,但只清理了部分列。在
当试图以某种方式替换数据帧片段上的列名时,它不起作用,这是为什么?在
假设我们有以下数据帧:
注意底部是可复制代码,用于复制数据:
Value ColAfjkj ColBhuqwa ColCouiqw
0 1 a e i
1 2 b f j
2 3 c g k
3 4 d h l
我要清理列名(预期输出):
^{pr2}$方法1:
我可以像这样得到干净的列名:
df.iloc[:, 1:].columns.str[:4]
Index(['ColA', 'ColB', 'ColC'], dtype='object')
或者
方法2:
s = df.iloc[:, 1:].columns
[col[:4] for col in s]
['ColA', 'ColB', 'ColC']
但是当我试图覆盖列名时,什么都不会发生:
df.iloc[:, 1:].columns = df.iloc[:, 1:].columns.str[:4]
Value ColAfjkj ColBhuqwa ColCouiqw
0 1 a e i
1 2 b f j
2 3 c g k
3 4 d h l
第二种方法:
s = df.iloc[:, 1:].columns
cols = [col[:4] for col in s]
df.iloc[:, 1:].columns = cols
Value ColAfjkj ColBhuqwa ColCouiqw
0 1 a e i
1 2 b f j
2 3 c g k
3 4 d h l
这确实有效,但您必须手动连接第一列的名称,这并不理想:
df.columns = ['Value'] + df.iloc[:, 1:].columns.str[:4].tolist()
Value ColA ColB ColC
0 1 a e i
1 2 b f j
2 3 c g k
3 4 d h l
有没有更容易实现的方法?我错过什么了吗?在
复制数据帧:
df = pd.DataFrame({'Value':[1,2,3,4],
'ColAfjkj':['a', 'b', 'c', 'd'],
'ColBhuqwa':['e', 'f', 'g', 'h'],
'ColCouiqw':['i', 'j', 'k', 'l']})
这是因为熊猫的指数是不变的。如果您检查文档中的^{} ,您将看到它被定义为:
因此,为了修改它,您必须创建一个新的列名列表,例如:
另一个选择是将^{} 与包含要替换的列的字典一起使用:
^{pr2}$要覆盖列名称,可以使用.rename()方法:
所以,它看起来像:
有关重命名的更多信息,请参阅文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rename.html
相关问题 更多 >
编程相关推荐