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)
我可能会做类似的事情
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。)