3

それdfが pandasDataFrameオブジェクトであるとします。

、空の文字列、または空白のみの文字列dfのみを含むのすべての列を削除するにはどうすればよいですか?None

Trueドロップの基準は、次のテスト関数に渡されたときにすべての値が得られる列として表すことができます。

lambda x: (x is None) or not re.match('\S', str(x))
4

2 に答える 2

1

以下で大まかに理解しましたが、Python の RegEx にはまだあまり詳しくありません。これは私がとる基本的なアプローチです:

ダミーデータ:

In [1]: df
Out[1]:
      a  b  c
0  None     1
1     b     2
2     c  x  3
3     d     4
4     e  z  5

In [2]: df.to_dict()
Out[2]:
{'a': {0: None, 1: 'b', 2: 'c', 3: 'd', 4: 'e'},
 'b': {0: ' ', 1: ' ', 2: 'x', 3: ' ', 4: 'z'},
 'c': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}}

ドロップする条件にラムダ テストを適用します。

In [3]: df.apply(lambda x: x.isin([None,""," "]))
Out[3]:
       a      b      c
0   True   True  False
1  False   True  False
2  False  False  False
3  False   True  False
4  False  False  False

any()df 列のいずれかで True をテストするメソッドを呼び出します

In [4]: df.apply(lambda x: x.isin([None,""," "])).any()
Out[4]:
a     True
b     True
c    False

上記のブール値シリーズで df.columns にインデックスを付けて、削除する列を取得します。

In [5]: drop_cols = df.columns[df.apply(lambda x: x.isin([None,""," "])).any()]

In [6]: drop_cols
Out[6]: Index([a, b], dtype=object)

df.drop() メソッドを使用し、axis=1 オプションを渡して列を操作します。

In [7]: df.drop(drop_cols, axis=1)
Out[7]:
   c
0  1
1  2
2  3
3  4
4  5

パンダ/正規表現の経験が豊富な人がその部分を理解できれば、まともな解決策があると思います.

于 2013-02-12T20:52:23.640 に答える