如何用列名中的“ .1”规范化列名,并且不删除任何其他字符?

时间:2018-12-17 16:49:06

标签: python python-3.x pandas dataframe

我有一个如下所示的df:

col1_test   col1_test.1
abc          NaN

如何在保留列名中所有其他字符的同时仅删除.1

要删除的.1当前代码:

df.columns = df.columns.str.extract(r'\.?', expand=False)

,但这会删除列名中的其他字符,例如下划线。

新df:

col1_test   col1_test
abc          NaN

设置完此部分后,我将使用以下内容合并列:

df = df.groupby(level=0, axis=1).first()

1 个答案:

答案 0 :(得分:2)

不建议这样做,因为当标题重复时,很难为特定的列建立索引。

但是,由于尝试执行groupby,因此更好的解决方案是传递可调用对象。

df
  col1_test  col1_test.1
0       abc          NaN

df.groupby(by=lambda x: x.rsplit('.', 1)[0], axis=1).first()

  col1_test
0       abc

作为参考,您将使用str.replace删除列后缀:

df.columns = df.columns.str.replace(r'\.\d+$', '') 

您也可以使用str.rsplit

df.columns = df.columns.str.rsplit('.', 1).str[0]
df
   col1_test  col1_test
0        abc        NaN