当前位置: 代码迷 >> python >> 将列中的非空值替换为1
  详细解决方案

将列中的非空值替换为1

热度:37   发布时间:2023-06-13 13:36:05.0

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

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

使用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值排列

您还可以使用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
  相关解决方案