2017-07-25 61 views
-1

我試圖從美國NCDC中擦除一些氣候數據,並且它具有不同數量的星號的列以指示空字段。我想用np.nan替換那些。在數據框中用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

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 
相關問題