/ / pandasデータフレームから値が1つしかない列を削除する最善の方法 - python、pandas

pandasデータフレームから1つの値のみを持つ列を削除する最も良い方法 - python、pandas

私は自分のデータセットから1つの値だけを持つ列を排除する関数を構築しようとしています。私はこの関数を使いました:

def oneCatElimination(dataframe):
columns=dataframe.columns.values
for column in columns:
if len(dataframe[column].value_counts().unique())==1:
del dataframe[column]
return dataframe

問題は、関数が1つ以上の異なる値を持つ偶数列、つまり整数を持つインデックス列を削除することです。

回答:

回答№1の場合は3

ちょうど

df.dropna(thresh=2, axis=1)

働くでしょう。他に何も必要ありません。すべての列に2つ以上の非NA値が渡されます(に渡される値によって制御されます)。 thresh)。ザ axis kwargを使用すると、行または列を操作できます。デフォルトでは行ですので、渡す必要があります axis=1 明示的に列を扱うようにしました(私が答えた時にこれを忘れていたので、この編集)。見る dropna() 詳細については。


回答№2の場合は1

いくつかの仮定がこれに入りました:

  • Null / NA値はカウントされません
  • 列を維持するには、複数の非NA値が必要です
  • これらの値は何らかの方法で異なる必要があります(例えば、1 "でいっぱいで1"のみの列は削除されます)。

それだけで、私は select 列にステートメント。

このデータフレームから始めると:

import pandas

N = 15
df = pandas.DataFrame(index=range(10), columns=list("ABCD"))
df.loc[2, "A"] = 23
df.loc[3, "B"] = 52
df.loc[4, "B"] = 36
df.loc[5, "C"] = 11
df.loc[6, "C"] = 11
df.loc[7, "D"] = 43
df.loc[8, "D"] = 63
df.loc[9, "D"] = 97

df

どれが作成されます:

     A    B    C    D
0  NaN  NaN  NaN  NaN
1  NaN  NaN  NaN  NaN
2   23  NaN  NaN  NaN
3  NaN   52  NaN  NaN
4  NaN   36  NaN  NaN
5  NaN  NaN   11  NaN
6  NaN  NaN   11  NaN
7  NaN  NaN  NaN   43
8  NaN  NaN  NaN   63
9  NaN  NaN  NaN   97

上の私の仮定を考えると、Aは1つの値だけを持ち、Cの値は両方とも同じなので、列AとCは削除されるべきです。

df.select(lambda c: df[c].dropna().unique().shape[0] > 1, axis=1)

そしてそれは私に与えます:

     B    D
0  NaN  NaN
1  NaN  NaN
2  NaN  NaN
3   52  NaN
4   36  NaN
5  NaN  NaN
6  NaN  NaN
7  NaN   43
8  NaN   63
9  NaN   97

回答№3の場合は0

これはテキストと数字の両方に対して機能します。

for col in dataframe:
if(len(dataframe.loc[:,col].unique()) == 1):
dataframe.pop(col)

注:これにより、元のデータフレームから値が1つだけの列が削除されます。