默认情况下,pandas.read_csv()
会以X,X.1,...,X.N的形式破坏重复的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
答案 0 :(得分:2)
我可能会做类似
的事情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。)
答案 1 :(得分:0)
这是我的单行,假设您的列名中没有点字符。
df = df.loc[:,df.columns.str.find('.') < 0]