从 pandas 读取的 Excel dataframe 中删除重复列

4
最接近的答案在下方链接中:如何在 pandas 中删除从 excel 读取的重复列 我的要求略有不同。 我有100多个列,列名中可能含有'.'(点)。示例数据帧如下:
df = pd.DataFrame(columns=['A', 'B', 'C','A','D. s'])

因此我无法根据“.1”或“.2”截断。

另外,当我从Excel中读取时,列名被读取为A、A.1和A.2等,因此即使使用以下命令也无法工作。

df = df.loc[:,~df.columns.duplicated()]

我想要删除A、A.1,保留A.2。请给出建议。

2
你可以尝试使用 df.loc[:,~df.columns.str.replace('\.\d+','').duplicated(keep='last')] 吗? - anky
Please post it as an answer. - Abhishek Kulkarni
@AbhishekKulkarni 你试过 df.filter(regex=r'^(?!\w\.[0-9])') 吗? - Mayank Porwal
@Mayank Porwal,谢谢,但是它没有起作用。我不知道为什么。我不擅长正则表达式。 - Abhishek Kulkarni
2个回答

3

理解我所说的话,您可以先去掉小数点后面的数字,然后只保留最后一个重复的内容:

df.loc[:,~df.columns.str.replace('\.\d+','').duplicated(keep='last')]

1
像这样的东西可能会起作用:
In [552]: df                                                                                                                                                                                                
Out[552]: 
   A  A.1  A.2  A.3  B  B.1  B.3  B.s
0  1    2    3    4  1    2    1    2
1  2    3    4    5  2    4    4    3

In [554]: df.filter(regex=r'^(?!\w\.[0-9])')                                                                                                                                                                
Out[554]: 
   A  B  B.s
0  1  1    2
1  2  2    3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接