示例df为:
a b c d e
0 SN123456 3 5 7 SN123456
1 SN456123 4 6 8 SN456123
我想知道如何根据数据将列名从'a'重命名为'Serial_Number'-它以'SN'开头,长度为fix:8。
(我们可能不知道'a'的名称,因为它是从某些csv文件中读取的,位置也不知道)
同样如何删除重复的列'e',它与列'a'完全重复
有更快的想法吗? 循环每个列序列并获取其索引,然后重命名列名不是一个好方法。 谢谢!
答案 0 :(得分:1)
这里是针对您的评论的重写。这将以矢量化方式重命名+ drop。
给出df
:
>>> df
a b c d e f g
0 SN123456 3 5 7 SN123456 0 0
1 SN456123 4 6 8 SN456123 0 0
创建3个与列长度相同的布尔掩码:
>>> mask1 = df.dtypes == 'object'
>>> mask2 = df.iloc[0].str.len() == 8
>>> mask3 = df.iloc[0].str.startswith('SN')
使用这些来标识哪些列看起来像序列号。第一个将被重命名;其余的将被丢弃。
>>> rename, *drop = df.columns[mask1 & mask2 & mask3]
然后重命名并拖放:
>>> rename
'a'
>>> drop
['e']
>>> df.rename(columns={rename: 'Serial_Number'}).drop(drop, axis=1)
Serial_Number b c d f g
0 SN123456 3 5 7 0 0
1 SN456123 4 6 8 0 0