私は自分のデータセットから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つだけの列が削除されます。