从数据帧中删除重复列的最简单方法是什么
我正在通过以下方式读取具有重复列的文本文件:
将熊猫作为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()为每列返回一个布尔数组:aTrue或False。如果是False,则列名在该点之前是唯一的;如果是True,则列名在前面重复。例如,使用给定的示例,返回值将是[False,False,True]
Pandas允许使用布尔值进行索引,从而仅选择True值。由于我们希望保留未重复的列,因此需要翻转上面的布尔数组(即[True,True,False]=~[False,False,True])
最后,df.loc[:,[True,True,False]使用上述索引功能仅选择非重复列
注意:上面只检查列名称,不检查列值