替换pandas数据帧中任何列的值

use*_*827 4 python pandas

在下面的数据框中:

 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    - 
Run Code Online (Sandbox Code Playgroud)

如何-用NaN 替换所有的.我不想指定列名,因为我事先不知道哪个列会有-

chr*_*ock 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
Run Code Online (Sandbox Code Playgroud)


piR*_*red 5

如果这些是字符串,那么你的花车可能也是字符串.

假设你的数据帧是df,我试试

pd.to_numeric(df.stack(), 'coerce').unstack()
Run Code Online (Sandbox Code Playgroud)

更深入的解释

熊猫通常不代表失踪的浮子'-'.因此,那'-'必须是一个字符串.因此,dtype任何带有a的列'-'必须是'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    -
Run Code Online (Sandbox Code Playgroud)

有什么dtypes

print(df.dtypes)

T2MN      object
T2MX     float64
RH2M      object
DFP2M    float64
RAIN      object
dtype: object
Run Code Online (Sandbox Code Playgroud)

第一个元素的类型是什么?

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

<class 'str'>
Run Code Online (Sandbox Code Playgroud)

这意味着任何具有a '-'的列都像一列看起来像浮点数的字符串.您希望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
Run Code Online (Sandbox Code Playgroud)