Python str.strip()删除数字?

Python str.strip()删除数字?,python,pandas,Python,Pandas,我得到了以下数据帧: 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 LAN

我得到了以下数据帧:

    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
当我这样做的时候

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

它会删除PSD列中的值,并将其设置为NaN。为什么呢?我怎样才能修好它?谢谢大家!

我敢打赌,对象列PSD包含混合类型的字符串和整数:

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'
。。。你可以解决这个问题。尽管我怀疑有更好的方法:


我敢打赌,对象列PSD包含混合类型的字符串和整数:

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'
。。。你可以解决这个问题。尽管我怀疑有更好的方法:


请提供a。请提供a。NaN和NaN是否相同?@JOHN here NaN是字符串
'NaN'
,而不是
NaN
/
np.NaN
(浮点数)。NaN和NaN是否相同?@JOHN here NaN是字符串
'NaN'
,而不是
NaN
/
np.NaN
(浮点数)。