質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

7493閲覧

ある列の値がすべて任意の同じ値の時、その列を消去する

baya

総合スコア14

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

1グッド

1クリップ

投稿2018/08/02 13:41

編集2018/08/02 14:02

ある列の値がすべて任意の同じ値の時、その列を消去する

例えば, 下記の表があったとして、任意の値を5とした時に
d列とf列の値はすべて5なので、d列とf列を消去したいです。
g列はすべて同じ値をとっていますが、任意の値出ないので残ります。

実行前 //data.csv a,b,c,d,e,f,g 0,0,1,5,5,5,9 4,5,3,5,4,5,9 0,7,5,5,4,5,9 4,5,6,5,7,5,9 4,7,8,5,4,5,9
実行後 //data.csv a,b,c,e,g 0,0,1,5,9 4,5,3,4,9 0,7,5,4,9 4,5,6,7,9 4,7,8,4,9

pandasでできないか色々調べたのですが、判らなかったです。

お手数ですが、助言をいただけるとありがたいです。

Ryo-EAST👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんな感じで。列ごとにユニークな要素の個数を数え、1でない列だけ残します。

python

1import io 2import pandas as pd 3 4txt = """ 5a,b,c,d,e,f 60,0,1,5,5,5 74,5,3,5,4,5 80,7,5,5,4,5 94,5,6,5,7,5 104,7,8,5,4,5 11""" 12 13df = pd.read_csv(io.StringIO(txt), header=0) 14print(df) 15""" => 16 a b c d e f 170 0 0 1 5 5 5 181 4 5 3 5 4 5 192 0 7 5 5 4 5 203 4 5 6 5 7 5 214 4 7 8 5 4 5 22""" 23 24print(df.nunique()) 25""" => 26a 2 27b 3 28c 5 29d 1 30e 3 31f 1 32dtype: int64 33""" 34 35print(df.loc[:,~(df.nunique()==1)]) 36""" => 37 a b c e 380 0 0 1 5 391 4 5 3 4 402 0 7 5 4 413 4 5 6 7 424 4 7 8 4 43"""

参考:
pandasでユニークな要素の個数、頻度(出現回数)をカウント | note.nkmk.me

追記

「すべて任意の数(たとえば5)の列を除去したい」ということだったので、

python

1import io 2import pandas as pd 3 4txt = """ 5a,b,c,d,e,f 60,0,1,5,5,5 74,5,3,5,4,5 80,7,5,5,4,5 94,5,6,5,7,5 104,7,8,5,4,5 11""" 12 13df = pd.read_csv(io.StringIO(txt), header=0) 14print(df) 15""" => 16 a b c d e f 170 0 0 1 5 5 5 181 4 5 3 5 4 5 192 0 7 5 5 4 5 203 4 5 6 5 7 5 214 4 7 8 5 4 5 22""" 23 24print(df==5) 25""" => 26 a b c d e f 270 False False False True True True 281 False True False True False True 292 False False True True False True 303 False True False True False True 314 False False False True False True 32""" 33 34print(~(df == 5).all(axis=0)) 35""" => 36a True 37b True 38c True 39d False 40e True 41f False 42dtype: bool 43""" 44 45print(df.loc[:, ~(df == 5).all(axis=0)]) 46""" => 47 a b c e 480 0 0 1 5 491 4 5 3 4 502 0 7 5 4 513 4 5 6 7 524 4 7 8 4 53"""

df全体を5と比較してbooleanにし、~(df == 5).all(axis=0)で残す列を選択します。

投稿2018/08/02 13:48

編集2018/08/02 14:12
hayataka2049

総合スコア30939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

baya

2018/08/02 13:58

せっかく考えて頂いたのですが、説明不足ですみません。 任意の数字以外ですべて同じ値の列は残したいのです。
baya

2018/08/02 14:18

なるほど、勉強になりました。 ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問