在下面的数据框中:
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替换所有-
。我不想指定列名,因为我事先不知道哪个列会有-
答案 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
上运行,因此我们stack
和unstack
。
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
/ notnull
在pandas.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