在python数据框架中包含nan的列中更改负值?



嗨,我有一个这样的数据框架,我想用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列有objectdtype -您可以通过将其转换为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

最新更新