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

pst*_*tix 5 python python-3.x pandas

默认情况下,pandas.read_csv()会破坏 X、X.1、...、XN 形式的重复 CSV 标头

标志mangle_dupe_cols = False返回:

ValueError: Setting mangle_dupe_cols=False is not supported yet

在我看来,这似乎很愚蠢,为什么你会允许布尔标志但禁用布尔性......

有没有一种方法可以通过 pandas API 最适合通过该read_csv()方法在 DataFrame 初始化时检测/删除重复标头?

可能的解决方案(非 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
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 5

我可能会做类似的事情

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
Run Code Online (Sandbox Code Playgroud)

(稍微丑化一下,我们也可以处理非字符串列,但也许是 YAGNI。)