Python 从pandas.read_csv()中删除重复列
默认情况下,以X、X.1、…、X.N的形式管理重复的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
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的答案。