将列中的非空值替换为1

时间:2015-10-19 15:46:59

标签: python pandas dataframe

我的数据框有一个如下所示的列:

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().

2 个答案:

答案 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