2017-12-16 6 views
0

私は、次のデータフレームを得た:私はstr.strip()は数値を削除しますか?

#remove space in content 
df_obj = sighting.select_dtypes(['object']) 
df_obj 
sighting[df_obj.columns] = df_obj.apply(lambda x: x.str.strip()) 

を行う際

DATE  STG #TIME HRD SZ AREA BEAU PSD EFFORT TYPE NORTHING EASTING SEASON BOAT ASSOC. P/S 
0 2016-04-06 1 1025 12 W LANTAU 2 58 ON HKCRP 813713 802792 SPRING NONE S 
1 2016-04-06 2 1113 3 W LANTAU 4 27 ON HKCRP 806173 802043 SPRING NONE S 
2 2016-04-06 3 1345 2 SW LANTAU 2 ND OFF HKCRP 805606 803300 SPRING NONE NaN 

それはPSD列の値を削除し、NaNのようにそれらを作りました。何故ですか?どのように修正できますか?ありがとうございました!

+1

[最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve)を入力してください。 – Galen

答えて

2

私の賭けは、オブジェクト列PSDは、文字列とintの種類を混合していることである。

In [11]: df_obj.PSD.values 
Out[11]: array([58, 27, 'ND'], dtype=object) 

In [12]: df_obj.apply(lambda x: x.str.strip()) 
Out[12]: 
     DATE SZ AREA PSD EFFORT TYPE SEASON BOAT ASSOC.P/S 
0 2016-04-06 W LANTAU NaN  ON HKCRP SPRING NONE   S 
1 2016-04-06 W LANTAU NaN  ON HKCRP SPRING NONE   S 
2 2016-04-06 SW LANTAU ND OFF HKCRP SPRING NONE  NaN 

あなたは文字列にすべてのオブジェクト列を強制することでこの問題を回避することができます

In [13]: df_obj.astype("str").apply(lambda x: x.str.strip()) 
Out[13]: 
     DATE SZ AREA PSD EFFORT TYPE SEASON BOAT ASSOC.P/S 
0 2016-04-06 W LANTAU 58  ON HKCRP SPRING NONE   S 
1 2016-04-06 W LANTAU 27  ON HKCRP SPRING NONE   S 
2 2016-04-06 SW LANTAU ND OFF HKCRP SPRING NONE  nan 

注意:これは完璧ではないことがわかりますNaN'nan'に変換されました。あなたはもっと良い方法があると思われますが、これを回避することができます:

In [21]: df_obj.where(df_obj.isnull(), df_obj.astype("str")).apply(lambda x: x.str.strip()) 
Out[21]: 
     DATE SZ AREA PSD EFFORT TYPE SEASON BOAT ASSOC.P/S 
0 2016-04-06 W LANTAU 58  ON HKCRP SPRING NONE   S 
1 2016-04-06 W LANTAU 27  ON HKCRP SPRING NONE   S 
2 2016-04-06 SW LANTAU ND OFF HKCRP SPRING NONE  NaN 
+0

はNaNと同じですか? – JOHN

+0

@JOHN here nanは 'nan' /' np.NaN'(float)ではなく、 '' nan''という文字列です。 –

関連する問題