我的数据框有一个如下所示的列:
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().
答案 0 :(得分:2)
使用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或仅为{1}}布尔数组中的一个True
值
答案 1 :(得分:1)
您也可以使用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