Python 从pandas.read_csv()中删除重复列

Python 从pandas.read_csv()中删除重复列,python,python-3.x,pandas,Python,Python 3.x,Pandas,默认情况下,以X、X.1、…、X.N的形式管理重复的CSV标题 标志mangle\u dupe\u cols=False返回: ValueError:尚不支持设置mangle\u dupe\u cols=False 这对我来说似乎是愚蠢的,为什么你会允许一个布尔标志,但禁用布尔属性 通过pandas API是否有一种最适合通过read\u csv()方法在数据帧初始化时检测/删除重复头的方法 可能的解决方案(非API): headers = set(df.columns) # will incl

默认情况下,以X、X.1、…、X.N的形式管理重复的CSV标题

标志
mangle\u dupe\u cols=False
返回:

ValueError:尚不支持设置mangle\u dupe\u cols=False

这对我来说似乎是愚蠢的,为什么你会允许一个布尔标志,但禁用布尔属性

通过pandas API是否有一种最适合通过
read\u csv()
方法在数据帧初始化时检测/删除重复头的方法

可能的解决方案(非API)

headers = set(df.columns) # will include 'X' and 'X.1'
n = 0
unique = []
for i in range(len(headers)):
    d = 1
    if i != n:
        continue # skip dupes
    elif (headers[i] + '.' + str(d)) in headers:
        while True: # find next unique element
            d += 1
            n += 1
            if (headers[i] + '.' + str(d)) not in headers:
                break
    unique.append(headers[i])
    n += 1

我可能会这样做

In [22]: df = pd.read_csv("dup.col")

In [23]: df
Out[23]: 
   A  A.1  B  C  C.1  C.2  D  E  C.3
0  1    2  3  4    5    6  7  8    9
1  1    2  3  4    5    6  7  8    9

In [24]: df.loc[:, ~df.columns.str.replace("(\.\d+)$", "").duplicated()]
Out[24]: 
   A  B  C  D  E
0  1  3  4  7  8
1  1  3  4  7  8

(再加上一些修饰,我们也可以处理非字符串列,但可能是YAGNI。)

这里是我的一行,假设列名中没有点字符

df = df.loc[:,df.columns.str.find('.') < 0]
df=df.loc[:,df.columns.str.find('.')<0]

您使用的是最新版本吗?否则,你想做什么?删除它们或重命名列?@cᴏʟᴅsᴘᴇᴇᴅ 我使用的是0.22.0,我想做两件事:检测重复和删除重复列。一旦发现,我就可以轻松地操纵数据帧。但是,我想知道是否有一种方法可以完全避免这种情况,而无需进行后期处理,比如
df.remove\u dupe\u cols()
.Hmm,比如
df[~df.columns.str.contains('.')]
?@cᴏʟᴅsᴘᴇᴇᴅ 假定没有其他标题具有
。是。。。是的。否则,您应该使用DSM的答案。