gpt4 book ai didi

python pandas删除重复的列

转载 作者:IT老高 更新时间:2023-10-28 21:10:01 24 4
gpt4 key购买 nike

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

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

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 菜鸟。任何建议将不胜感激。


其他详情

Pandas 版本:0.9.0
Python版本:2.7.3
window 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

最佳答案

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

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

工作原理:

假设数据框的列是['alpha','beta','alpha']

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

Pandas 允许使用 bool 值进行索引,从而只选择 True 值。由于我们要保留不重复的列,我们需要将上面的 bool 数组进行翻转(即 [True, True, False] = ~[False,False,True])

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

最后的 .copy() 用于将数据帧复制到(主要)避免在稍后尝试修改现有数据帧时出错。

注意:以上只检查列名,列值。

删除重复索引

既然足够相似,就在索引上做同样的事情:

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

通过检查值而不转置来删除重复项

df = df.loc[:,~df.apply(lambda x: x.duplicated(),axis=1).all()].copy()

这避免了转置的问题。快吗?不,它有效吗?是的。在这里,试试这个:

# create a large(ish) dataframe
ldf = pd.DataFrame(np.random.randint(0,100,size= (736334,1312)))


#to see size in gigs
#ldf.memory_usage().sum()/1e9 #it's about 3 gigs

# duplicate a column
ldf.loc[:,'dup'] = ldf.loc[:,101]

# take out duplicated columns by values
ldf = ldf.loc[:,~ldf.apply(lambda x: x.duplicated(),axis=1).all()].copy()

关于python pandas删除重复的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14984119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com