在下面的数据框中:
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 替换所有的.我不想指定列名,因为我事先不知道哪个列会有-
只是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)
如果这些是字符串,那么你的花车可能也是字符串.
假设你的数据帧是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,所以我们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
Run Code Online (Sandbox Code Playgroud)