如何通过检查列的数据来重命名Pandas DataFrame列名

时间:2018-08-08 02:46:27

标签: pandas

示例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'完全重复

有更快的想法吗? 循环每个列序列并获取其索引,然后重命名列名不是一个好方法。 谢谢!

1 个答案:

答案 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