1. ホーム
  2. パイソン

[解決済み】python pandasが重複したカラムを削除します。

2022-04-07 17:37:53

質問

データフレームから重複した列を削除する最も簡単な方法は何ですか?

テキストファイルを読んでいるのですが、列が重複しています。

import pandas as pd

df=pd.read_table(fname)

カラム名は

Time, Time Relative, N2, Time, Time Relative, H2, etc...

TimeとTime Relativeのカラムはすべて同じデータを含んでいます。私は欲しい。

Time, Time Relative, N2, H2

などなど、落とす、消す、などの私の試みはすべて。

df=df.T.drop_duplicates().T

一意的に評価されるインデックスのエラーになる。

Reindexing only valid with uniquely valued index objects

パンダ初心者で申し訳ありません。何かアドバイスがあればお願いします。


追加情報

Pandasバージョン:0.9.0

Python バージョン: 2.7.3

Windows 7

(Pythonxy2.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

解決方法は?

以下は、重複した列を削除するための1行の解決策です。 列名 :

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

仕組みについて

データフレームの列が以下の通りだとする。 ['alpha','beta','alpha']

df.columns.duplicated() はブーリアン配列を返します。 True または False を各カラムに設定します。もし、それが False であれば、カラム名はその時点までで一意であり、もしそれが True の場合、カラム名は先に重複しています。例えば、与えられた例を使って、返される値は次のようになります。 [False,False,True] .

Pandas は、ブーリアン値を使ったインデックスを作成することができ、これにより True の値です。重複していないカラムを保持したいので、上のブール配列は反転させる必要があります (つまり [True, True, False] = ~[False,False,True] )

最後に df.loc[:,[True,True,False]] は、前述のインデックス作成機能を使って、重複しないカラムのみを選択します。

備考 : 上記はカラム名のみをチェックします。 ではなく カラムの値です。