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

时间:2017-02-11 04:21:59

标签: 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    - 

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

4 个答案:

答案 0 :(得分:5)

只需.box字符串:

replace()

答案 1 :(得分:5)

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

假设您的数据框为df,我会尝试

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

更深入的解释

Pandas通常不代表'-'的遗失浮标。因此,'-'必须是字符串。因此,其中包含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

答案 2 :(得分:2)

我认为你想要实际的numpy.nan而不是字符串NaN,因为你可以使用很多方法,例如fillna / isnull / notnullpandas.Series / pandas.DataFrame

import pandas as pd

import numpy as np

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

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

答案 3 :(得分:1)

看起来你正在从CSV / FWF文件中读取这些数据......如果它是真的,摆脱'-'的最简单方法就是解释Pandas它是NaN {1}}代表:

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