str.strip公司()删除数字?

2024-09-27 21:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了以下数据帧:

    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。为什么?我该怎么修?谢谢您!你知道吗


Tags: 数据noneobjdfdatetimeonnan
1条回答
网友
1楼 · 发布于 2024-09-27 21:28:19

我敢打赌,object列PSD包含string和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

相关问题 更多 >

    热门问题