为什么替换一个值会给object
dtype,而替换两个值会给float64
dtype?
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
In [3]: df
Out[3]:
a b
0 1 4
1 2 5
2 3 6
In [6]: df.replace({1: None})
Out[6]:
a b
0 None 4
1 2 5
2 3 6
In [7]: df.replace({1: None, 5: None})
Out[7]:
a b
0 NaN 4.0
1 2.0 NaN
2 3.0 6.0
In [8]: df.replace({1: None}).dtypes
Out[8]:
a object
b object
dtype: object
In [9]: df.replace({1: None, 5: None}).dtypes
Out[9]:
a float64
b float64
dtype: object
只需代码:
import pandas as pd
df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
df.replace({1: None})
df.replace({1: None, 5: None})
df.replace({1: None}).dtypes
df.replace({1: None, 5: None}).dtypes
答案 0 :(得分:2)
这似乎被埋在replace
if
/ then
逻辑中,该逻辑根据mapping
的长度而有所不同
我要保持一致的行为,请不要使用None
。使用np.nan
df.replace({1: np.nan})
a b
0 NaN 4.0
1 2.0 5.0
2 3.0 6.0
或
df.replace({1: np.nan, 5: np.nan})
a b
0 NaN 4.0
1 2.0 NaN
2 3.0 6.0
如果要替换一列,而让其他列保留,请传递一个嵌套的字典,该字典指定对哪一列执行的操作
df.replace({'a': {1: np.nan}})
a b
0 NaN 4
1 2.0 5
2 3.0 6
或
df.replace({'a': {1: np.nan}, 'b': {5: None}})
a b
0 NaN 4
1 2.0 None
2 3.0 6