2016-05-10 11 views
1

私は私が特定の文字で、それを削除しようとすると、以下のエラーを与えているパンダにおけるデータフレームがあります。はAttributeError:「NoneType」オブジェクトが属性「lstrip」を持っていない

AttributeError: 'NoneType' object has no attribute 'lstrip'

を、私はいずれかを除去することで始めました(2 $%ZYC)

それを点検
df_sample1['counties'].fillna('missing') 

、私は(nはカウント... 2カウント、郡1)、実際のデータの混在を汚れた大量のデータを見るだけでなく、ちんぷんかんぷん:見つからないかnull値。

df_sample1['counties'] = df_sample1['counties'].map(lambda x: x.lstrip('+%=/-#$;!\(!\&=&:%;').rstrip('1234567890+%=/-#$;!\(!\&=&:%;')) 
df_sample1[:10] 

これは「NoneType」エラーが発生します。

はこれをさらにきれいにするために、私は次のコードを実行しました。 私はちょっと掘り下げました.Pandasのドキュメントには、欠損値をスキップするヒントがいくつかあります。

if df_sample1['counties'] is None: 
    pass 
else: 
    df_sample1['counties'].map(lambda x: x.lstrip('+%=/-#$;!\(!\&=&:%;').rstrip('1234567890+%=/-#$;!\(!\&=&:%;')) 

これは、上記のNoneTypeエラーを生成します。誰かが間違っていることを指摘できますか?あなたはxは、ストリッピングを行う前にtruthyであるかどうかをチェックすることによってNoneを「スキップ」することができます

+0

あなたの 'lambda'の中に' if'がある必要があります。 – zondo

+0

そのようなfillnaを呼び出すと、コピーを返すだけで元のdfは変更されません。 'df_sample1 ['counties']を試してくださいfillna( 'missing'、inplace = True)' – ayhan

+0

[the docs]の引数 'na_action'を参照してください(http://pandas.pydata.org/pandas-docs/version/0.17 .0/generated/pandas.Series.map.html)。 –

答えて

0

...

df_sample1['counties'].map(lambda x: x and x.lstrip('+%=/-#$;!\(!\&=&:%;').rstrip('1234567890+%=/-#$;!\(!\&=&:%;')) 

これはおそらく、(彼らは以前と同じ場所での)データフレームの一部のNoneを残しますしかし、トランスフォームは文字列に対しても機能するはずです。

1

テキストデータを扱っている場合は、最初にNone型のデータに空の文字列を入力するのはなぜですか?

df_sample1['counties'].fillna("", inplace=True) 
1

あなたの欠点は、あなたが欠けている値を埋めたときに、あなたがそれをしなかったことであると思われます。

df_sample1['counties'].fillna('missing', inplace=True) 

または、pandas.Series.mapを適用するとき、あなたはNoneとしてこれらのエントリを残すために、引数na_actionを使用することができます。これは、によって対処することができます。

df_sample1['counties'] = df_sample1['counties'].map(lambda x: ..., na_action='ignore') 
関連する問題