从数据框中删除重复列的最简单方法是什么?
我正在通过以下方式读取具有重复列的文本文件:
import pandas as pd
df=pd.read_table(fname)
列名是:
Time, Time Relative, N2, Time, Time Relative, H2, etc...
所有时间和时间相关列都包含相同的数据。我想:
Time, Time Relative, N2, H2
我在删除、删除等方面的所有尝试,例如:
df=df.T.drop_duplicates().T
导致唯一值索引错误:
Reindexing only valid with uniquely valued index objects
很抱歉成为 Pandas 菜鸟。任何建议,将不胜感激。
额外细节
熊猫版本:0.9.0
蟒蛇版本:2.7.3
Windows 7的
(通过 Pythonxy 2.7.3.0 安装)
数据文件(注意:在真实文件中,列之间用制表符分隔,这里用4个空格分隔):
Time Time Relative [s] N2[%] Time Time Relative [s] H2[ppm]
2/12/2013 9:20:55 AM 6.177 9.99268e+001 2/12/2013 9:20:55 AM 6.177 3.216293e-005
2/12/2013 9:21:06 AM 17.689 9.99296e+001 2/12/2013 9:21:06 AM 17.689 3.841667e-005
2/12/2013 9:21:18 AM 29.186 9.992954e+001 2/12/2013 9:21:18 AM 29.186 3.880365e-005
... etc ...
2/12/2013 2:12:44 PM 17515.269 9.991756+001 2/12/2013 2:12:44 PM 17515.269 2.800279e-005
2/12/2013 2:12:55 PM 17526.769 9.991754e+001 2/12/2013 2:12:55 PM 17526.769 2.880386e-005
2/12/2013 2:13:07 PM 17538.273 9.991797e+001 2/12/2013 2:13:07 PM 17538.273 3.131447e-005
原文由 Onlyjus 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是基于重复 列名 删除列的单行解决方案:
怎么运行的:
假设数据框的列是
['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]]
使用上述索引功能仅选择非重复列。最后的
.copy()
用于复制数据帧以(主要)避免出现有关稍后尝试修改现有数据帧的错误。注意:上面只检查列名, 不 检查列值。
删除重复索引
因为足够相似,所以在索引上做同样的事情:
通过检查值而不转置来删除重复项
这样就避免了转置的问题。快吗?不,它有效吗?是的。在这里,试试这个: