嗨,我有一个这样的数据框架,我想用0替换负值,但同时保持Nan值。下面的代码不起作用,因为在'str'和'int'的实例之间不支持df['Data']<0
。有什么简单的建议吗?
df[(df['Data'].notnull())& (df['Data']<0)]
Data
0 1
1 0.5
2 0
3 -0.5
4 -1
5 Nan
6 Nan
想要的结果
Data
0 1
1 0.5
2 0
3 0
4 0
5 Nan
6 Nan
将小于0的数字替换为0,同时保持NaN不变,您可以使用loc
并将其等同于0。代码
data1 = {'Data': [1, 0.5, -0.5, 0, -1, np.nan, np.nan]}
df=pd.DataFrame(data1)
>>df
Data
0 1.0
1 0.5
2 -0.5
3 0.0
4 -1.0
5 NaN
6 NaN
df.loc[df['Data']<0,'Data'] = 0
>>df
Data
0 1.0
1 0.5
2 0.0
3 0.0
4 0.0
5 NaN
6 NaN
根据您的错误信息-看起来您的Data
列有object
dtype -您可以通过将其转换为float
来绕过它
>>> x = [1, 0.5, 0, -0.5, -1, 'nan', 'Nan']
>>> df = pd.DataFrame(x, columns=['Data'])
这给了我同样的错误,你描述-
>>> df[(df['Data'].notnull())& (df['Data']<0)]
TypeError: '<' not supported between instances of 'str' and 'int'
但这取代了负数,同时保持nan
完整
>>> df.loc[(df['Data'].astype(float).notnull())& (df['Data'].astype(float)<0), ['Data']] = 0
>>> df
Data
0 1
1 0.5
2 0
3 0
4 0
5 nan
6 Nan