问题描述
我有一个数据框,其列具有如下所示的列:
note
129.0
130.0
131.0
132.0
133.0
134.0
135.0
136.0
137.0
138.0
139.0
140.0
141.0
142.0
143.0
所以有些行不包含值(NaN)。 我想将不是NaN的数值替换为1,以便:
note
1
1
1
1
1
1
1
1
我试过这段代码:
def replace():
if (pd.notnull(df['note'])):
df['note'] = '1'
return df
return df
它返回我ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
1楼
使用loc
为此:
In [86]:
df.loc[df['note'].notnull(), 'note'] = 1
df
Out[86]:
note
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 1
12 1
13 1
14 1
if (pd.notnull(df['note']))
不起作用,因为if
不理解如何处理布尔值数组因此值为ValueError
因为你可能在布尔值中包含所有-1或只有一个True
值排列
2楼
您还可以使用where
实现此操作,就像在就地操作中一样。
它会将任何与谓词不匹配的值设置为指定值。
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': ['a', 'b', 'c'], 'note': [145.0, np.NaN, 147.0]})
df.note.where(df.note.isnull(), 1, inplace=True)
产量
In [14]: print(df)
Out[14]:
a note
0 a 1
1 b NaN
2 c 1