1. ホーム
  2. python

[解決済み] pandasのDataFrameから空のセルを含む行を削除する

2022-07-01 20:46:16

質問

私は pd.DataFrame がありますが、これはいくつかのエクセル・スプレッドシートをパースすることによって作成されました。その中のある列には空のセルがあります。たとえば、以下はその列の頻度に関する出力です。 テナント .

>>> value_counts(Tenant, normalize=False)
                              32320
    Thunderhead                8170
    Big Data Others            5700
    Cloud Cruiser              5700
    Partnerpedia               5700
    Comcast                    5700
    SDP                        5700
    Agora                      5700
    dtype: int64

Tenant がない行を削除しようとしています。 .isnull() オプションは欠損値を認識しません。

>>> df['Tenant'].isnull().sum()
    0

カラムのデータ型が "Object"です。この場合、何が起こっているのでしょうか?どのように私はレコードをドロップすることができますここで テナント が欠落しているレコードを削除するにはどうすればよいですか?

どのように解決するのですか?

Pandas は、値が np.nan オブジェクトであれば null と認識し、次のように表示します。 NaN と表示されます。不足している値はおそらく空の文字列で、PandasはそれをNULLとして認識しません。これを解決するには、空の文字列(または空のセルにあるもの)を次のように変換してください。 np.nan オブジェクトに変換することができます。 replace() を使用し、次に dropna() を呼び出すと、NULLテナントを持つ行が削除されます。

デモンストレーションのために、いくつかのランダムな値といくつかの空の文字列を含むDataFrameを Tenants カラムにいくつかのランダムな値といくつかの空の文字列を含むDataFrameを作成します。

>>> import pandas as pd
>>> import numpy as np
>>> 
>>> df = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
>>> df['Tenant'] = np.random.choice(['Babar', 'Rataxes', ''], 10)
>>> print df

          A         B   Tenant
0 -0.588412 -1.179306    Babar
1 -0.008562  0.725239         
2  0.282146  0.421721  Rataxes
3  0.627611 -0.661126    Babar
4  0.805304 -0.834214         
5 -0.514568  1.890647    Babar
6 -1.188436  0.294792  Rataxes
7  1.471766 -0.267807    Babar
8 -1.730745  1.358165  Rataxes
9  0.066946  0.375640         

の中の空文字列を置き換えます。 Tenants カラムにある空文字列を np.nan オブジェクトを、このように

>>> df['Tenant'].replace('', np.nan, inplace=True)
>>> print df

          A         B   Tenant
0 -0.588412 -1.179306    Babar
1 -0.008562  0.725239      NaN
2  0.282146  0.421721  Rataxes
3  0.627611 -0.661126    Babar
4  0.805304 -0.834214      NaN
5 -0.514568  1.890647    Babar
6 -1.188436  0.294792  Rataxes
7  1.471766 -0.267807    Babar
8 -1.730745  1.358165  Rataxes
9  0.066946  0.375640      NaN

これでNULL値を落とせるようになりました。

>>> df.dropna(subset=['Tenant'], inplace=True)
>>> print df

          A         B   Tenant
0 -0.588412 -1.179306    Babar
2  0.282146  0.421721  Rataxes
3  0.627611 -0.661126    Babar
5 -0.514568  1.890647    Babar
6 -1.188436  0.294792  Rataxes
7  1.471766 -0.267807    Babar
8 -1.730745  1.358165  Rataxes