2017-02-11 95 views
4

替換值在下面的數據框:任何列在熊貓數據幀

T2MN T2MX RH2M DFP2M RAIN 
6.96 9.32 84.27 5.57 - 
6.31 10.46 -  5.63 - 
    - 10.66 79.38 3.63 - 
0.79 4.45 94.24 1.85 - 
1.45 3.99 91.71 1.17 - 

如何與南的更換所有的-。我不想指定列名,因爲我不知道列手這之前將有-

+0

這看起來像是男的顯示值 –

回答

5

如果這些都是字符串,那麼你的花車也可能字符串。

假設你的數據幀是df,我想嘗試

pd.to_numeric(df.stack(), 'coerce').unstack() 

再闡釋

大熊貓通常不與'-'表示丟失的浮動。因此,該'-'必須是一個字符串。因此,其中'-'的任何列的dtype必須是'object'。這使得很有可能不管分析數據,都將浮點數作爲字符串。

設置

from io import StringIO 
import pandas as pd 

txt = """T2MN T2MX RH2M DFP2M RAIN 
6.96 9.32 84.27 5.57 - 
6.31 10.46 -  5.63 - 
    - 10.66 79.38 3.63 - 
0.79 4.45 94.24 1.85 - 
1.45 3.99 91.71 1.17 - """ 

df = pd.read_csv(StringIO(txt), delim_whitespace=True) 
print(df) 

    T2MN T2MX RH2M DFP2M RAIN 
0 6.96 9.32 84.27 5.57 - 
1 6.31 10.46  - 5.63 - 
2  - 10.66 79.38 3.63 - 
3 0.79 4.45 94.24 1.85 - 
4 1.45 3.99 91.71 1.17 - 

什麼dtypes

print(df.dtypes) 

T2MN  object 
T2MX  float64 
RH2M  object 
DFP2M float64 
RAIN  object 
dtype: object 

第一個元素的類型是什麼?

print(type(df.iloc[0, 0])) 

<class 'str'> 

這意味着任何具有'-'的列都像一列看起來像浮點的字符串。您想要使用pd.to_numeric和參數errors='coerce'強制非數字項目到np.nan。但是,pd.to_numeric不適用於pd.DataFrame,所以我們stackunstack

pd.to_numeric(df.stack(), 'coerce').unstack() 

    T2MN T2MX RH2M DFP2M RAIN 
0 6.96 9.32 84.27 5.57 NaN 
1 6.31 10.46 NaN 5.63 NaN 
2 NaN 10.66 79.38 3.63 NaN 
3 0.79 4.45 94.24 1.85 NaN 
4 1.45 3.99 91.71 1.17 NaN 
5

只是replace()字符串:

In [10]: df.replace('-', 'NaN') 
Out[10]: 
    T2MN T2MX RH2M DFP2M RAIN 
0 6.96 9.32 84.27 5.57 NaN 
1 6.31 10.46 NaN 5.63 NaN 
2 NaN 10.66 79.38 3.63 NaN 
3 0.79 4.45 94.24 1.85 NaN 
4 1.45 3.99 91.71 1.17 NaN 
2

我想你想的實際numpy.nan而不是一個字符串NaN的,你可以用很多方法,如在pandas.Series/pandas.DataFrame

import pandas as pd 

import numpy as np 

df = pd.DataFrame([['-']*10]*10) 

df = df.replace('-',np.nan) 
1

看起來你fillna/isnull/notnull正在從CSV/FWF文件中讀取這些數據......如果這是真的,擺脫'-'的最簡單方法是解釋熊貓,它是NaN的表示:

df = pd.read_csv(filename, na_values=['NaN', 'nan', '-']) 

測試:

In [79]: df 
Out[79]: 
    T2MN T2MX RH2M DFP2M RAIN 
0 6.96 9.32 84.27 5.57 NaN 
1 6.31 10.46 NaN 5.63 NaN 
2 NaN 10.66 79.38 3.63 NaN 
3 0.79 4.45 94.24 1.85 NaN 
4 1.45 3.99 91.71 1.17 NaN 

In [80]: df.dtypes 
Out[80]: 
T2MN  float64 
T2MX  float64 
RH2M  float64 
DFP2M float64 
RAIN  float64 
dtype: object