看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas 对于 DataFrame 数据中,如果想删除重复行的内容可以使用 drop_duplicates() 方法,它还可以指定哪几列重复。但是,我们如果需要删除列名重复的应该怎么做呢?在例就来解决这个问题。
我们构造数据集如下:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(15).reshape(3, 5),
columns=[*'abcba'])
df
'''
a b c b a
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
'''
需求是列标签相同的只保留左边第一个,比如列名分别是 abcba,保留 abc 三列,后边两列前边已经有了,就删除掉。
先取出列索引对象,然后用它的 duplicated() 方法来检测重复的列名,反选取不重复的列名,这些操作会得到一个布尔序列。
将得到的布尔序列传入 loc[] 中进行数据筛选,便可得到我们想要的结果。
通过列索引对象检测重复内容,返回一个布尔序列。
# 列索引
df.columns
# Index(['a', 'b', 'c', 'b', 'a'], dtype='object')
# 指示重复的索引值,默认保留第一个
df.columns.duplicated()
# array([False, False, False, True, True])
# 取反,取不重复的
~df.columns.duplicated()
# array([ True, True, True, False, False])
将布尔序列传入 loc[] 进行筛选:
df.loc[:, ~df.columns.duplicated()]
'''
a b c
0 0 1 2
1 5 6 7
2 10 11 12
'''
在 loc[] 中,逗号左边冒号表示选择所有行,逗号右边的布尔序列可以选择对应位置上为 True 的列。用这种方法,也可以筛选掉行索引标签重复的行。
这样就得到我们想要的数据。
(完)
更新时间:2024-08-18 16:07:39 标签:pandas 删除 重复