python将删除重复的列

从数据帧中删除重复列的最简单方法是什么

我正在通过以下方式读取具有重复列的文本文件:

将熊猫作为pd导入
df=pd.read_表(fname)

列名为:

时间、相对时间、N2、时间、相对时间、H2等。。。

所有时间和时间相关列都包含相同的数据。我想:

时间,相对时间,N2,H2

我所有的删除、删除等尝试,例如:

df=df.T.删除重复项()

导致唯一值索引错误:

重新索引仅对唯一值索引对象有效

对不起,我是个笨蛋。如有任何建议,将不胜感激


其他详细信息

熊猫版本:0.9.0
Python版本:2.7.3
Windows 7
(通过Pythonxy 2.7.3.0安装)

数据文件(注意:在实际文件中,列由制表符分隔,此处由4个空格分隔):

相对时间[s]N2[%]相对时间[s]H2[ppm]
2013年12月2日9:20:55上午6.177 9.99268e+001 2013年12月2日9:20:55上午6.177 3.216293e-005
2013年12月2日9:21:06 AM 17.689.99296e+001 2013年12月2日9:21:06 AM 17.689 3.841667e-005
2013年12月2日上午9:21:18 29.186 9.992954e+001 2013年12月2日上午9:21:18 29.186 3.880365e-005
... 等
2013年2月12日下午2:12:44 17515.269.991756+001 2013年2月12日下午2:12:44 17515.269 2.800279e-005
2013年2月12日下午2:12:55 17526.769.991754e+001 2013年2月12日下午2:12:55 17526.769 2.880386e-005
2013年2月12日下午2:13:07 17538.273 9.991797e+001 2013年2月12日下午2:13:07 17538.273.131447e-005

下面是一个基于重复的列名删除列的单行解决方案:

df=df.loc[:,~df.columns.duplicated()]

工作原理:

假设数据帧的列是['alpha'、'beta'、'alpha']

df.columns.duplicated()为每列返回一个布尔数组:aTrueFalse。如果是False,则列名在该点之前是唯一的;如果是True,则列名在前面重复。例如,使用给定的示例,返回值将是[False,False,True]

Pandas允许使用布尔值进行索引,从而仅选择True值。由于我们希望保留未重复的列,因此需要翻转上面的布尔数组(即[True,True,False]=~[False,False,True]

最后,df.loc[:,[True,True,False]使用上述索引功能仅选择非重复列

注意:上面只检查列名称,不检查列值

发表评论