替换pandas datafram中任何列中的值

2024-10-03 02:37:00 发布

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

在下面的数据框中:

 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    - 

如何用NaN替换所有的-。我不想指定列名,因为我之前不知道哪个列将有-


Tags: 数据nanraint2mnt2mxrh2mdfp2m
3条回答

如果这些是字符串,那么您的浮动也可能是字符串。在

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

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

更深入的解释

Pandas通常不会用'-'表示丢失的浮点。因此,'-'必须是字符串。因此,任何包含'-'的列的dtype必须是'object'。这使得无论解析数据的是什么,都很有可能将浮点数保留为字符串。在

设置

^{pr2}$

什么是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上操作,所以我们stack和{}。在

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

只要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

我认为您需要实际的numpy.nan而不是字符串NaN,因为您可以在pandas.Series/isnull/notnull}上使用很多方法,比如pandas.Series/pandas.DataFrame

import pandas as pd

import numpy as np

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

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

相关问题 更多 >