いくつかのExcelスプレッドシートを解析して作成されたがありますpd.DataFrame
。その列には空のセルがあります。たとえば、以下はその列の頻度の出力です。32320レコードに欠損値があります。テナント。
>>> 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
テナントが欠落している行を削除しようとしていますが、.isnull()
オプションでは欠落している値が認識されません。
>>> df['Tenant'].isnull().sum()
0
列のデータ型は「オブジェクト」です。この場合、何が起こっているのでしょうか? レコードを削除するにはどうすればよいでしょうか?テナント不足している?
ベストアンサー1
Pandas は、値がオブジェクトの場合、それを null として認識し、DataFrame にnp.nan
として出力します。欠落している値はおそらく空の文字列であり、Pandas はこれを null として認識しません。これを修正するには、を使用して空の文字列 (または空のセルにあるもの) をオブジェクトに変換し、DataFrame を呼び出して null テナントの行を削除します。NaN
np.nan
replace()
dropna()
デモンストレーションとして、列にいくつかのランダムな値といくつかの空の文字列を含む DataFrame を作成しますTenants
。
>>> 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