在数据框中用NaN替换可变数量的星号

时间:2017-07-25 18:42:30

标签: python regex pandas

我正在尝试从美国NCDC清除一些气候数据,并且它有不同数量的星号列表示空白字段。我想用np.nan替换那些。

我试图用df.replace来做,但我正在努力使用正则表达式语法来处理字段中可变长度的星号。 我怀疑我需要类似df.replace('?', np.NaN)的内容,但'?'是一个正则表达式,可以匹配任意数量的星号。

以下是数据的剪辑:

USAF    WBAN    YR--MODAHRMN    DIR     SPD     GUS     CLG     SKC     L   M   ...     SLP     ALT     STP     MAX     MIN     PCP01   PCP06   PCP24   PCPXX   SD
0   722543  12977   200601010053    160     6   ***     722     CLR     *   *   ...     1010.9  29.83   1007.2  ***     ***     0.00    *****   *****   *****   **
1   722543  12977   200601010153    160     9   ***     722     CLR     *   *   ...     1011.0  29.83   1007.2  ***     ***     0.00    *****   *****   *****   **
2   722543  12977   200601010253    160     9   ***     722     CLR     *   *   ...     1011.1  29.83   1007.2  ***     ***     0.00    *****   *****   *****   **
3   722543  12977   200601010313    160     10  ***     722     SCT     *   *   ...     ******  29.83   1007.2  ***     ***     *****   *****   *****   *****   **
4   722543  12977   200601010321    160     10  ***     4       BKN     *   *   ...     ******  29.83   1007.2  ***     ***     *****   *****   *****   *****   **

1 个答案:

答案 0 :(得分:1)

具有正则表达式模式df.replace

'^\*+$'适用于此:

In [790]: df.replace('^\*+$', np.nan, regex=True)
Out[790]: 
     USAF   WBAN  YR--MODAHRMN  DIR  SPD  GUS  CLG  SKC   L   M     SLP  \
0  722543  12977  200601010053  160    6  NaN  722  CLR NaN NaN  1010.9   
1  722543  12977  200601010153  160    9  NaN  722  CLR NaN NaN  1011.0   
2  722543  12977  200601010253  160    9  NaN  722  CLR NaN NaN  1011.1   
3  722543  12977  200601010313  160   10  NaN  722  SCT NaN NaN     NaN   

     ALT     STP  MAX  MIN PCP01  PCP06  PCP24  PCPXX  SD  
0  29.83  1007.2  NaN  NaN  0.00    NaN    NaN    NaN NaN  
1  29.83  1007.2  NaN  NaN  0.00    NaN    NaN    NaN NaN  
2  29.83  1007.2  NaN  NaN  0.00    NaN    NaN    NaN NaN  
3  29.83  1007.2  NaN  NaN   NaN    NaN    NaN    NaN NaN  
相关问题