Python 熊猫将匹配条件的单元格替换为无

Python 熊猫将匹配条件的单元格替换为无,python,pandas,Python,Pandas,以以下示例数据帧为例: df = pd.DataFrame([['de', None, None], ['de ditos', 2, 3], [4, None, None], [None, None, 9], ['de', 4, 6]]) 看起来像 0 1 2 0 de NaN NaN 1

以以下示例数据帧为例:

df = pd.DataFrame([['de', None, None], 
                   ['de ditos', 2, 3], 
                   [4, None, None], 
                   [None, None, 9],
                   ['de', 4, 6]])
看起来像

          0    1    2
0        de  NaN  NaN
1  de ditos  2.0  3.0
2         4  NaN  NaN
3      None  NaN  9.0
4        de  4.0  6.0
我想将单元格值为“de”的列0中的所有值替换为None,以便数据帧以如下方式结束:

          0    1    2
0      None  NaN  NaN
1  de ditos  2.0  3.0
2         4  NaN  NaN
3      None  NaN  9.0
4      None  4.0  6.0
我试过:

df[0].where(df[0] == 'de') = None
返回SyntaxError:无法分配给函数调用

我还尝试:

def erasedes(x):
    if x == 'de':
        return None
    else: pass
df[0] = df[0].apply(lambda x: erasedes(x))

但这会将每个值替换为“无”

您真正想要的是:

In [3]: df
Out[3]:
          0    1    2
0        de  NaN  NaN
1  de ditos  2.0  3.0
2         4  NaN  NaN
3      None  NaN  9.0
4        de  4.0  6.0

In [4]: df.loc[df[0] == 'de',0] = None

In [5]: df
Out[5]:
          0    1    2
0      None  NaN  NaN
1  de ditos  2.0  3.0
2         4  NaN  NaN
3      None  NaN  9.0
4      None  4.0  6.0
注意,您的
.apply
方法不起作用,因为您的
erasedes
函数始终返回
None
否则:pass
不执行任何操作,函数终止,并隐式返回
None
。如果您使用了
else:return x

In [6]: df = pd.DataFrame([['de', None, None],
   ...:                    ['de ditos', 2, 3],
   ...:                    [4, None, None],
   ...:                    [None, None, 9],
   ...:                    ['de', 4, 6]])

In [7]: def erasedes(x):
   ...:     if x == 'de':
   ...:         return None
   ...:     else:
   ...:         return x
   ...:
In [8]: df[0]
Out[8]:
0          de
1    de ditos
2           4
3        None
4          de
Name: 0, dtype: object

In [9]: df[0].apply(erasedes)
Out[9]:
0        None
1    de ditos
2           4
3        None
4        None
Name: 0, dtype: object
您应该更喜欢基于
.loc
/
.iloc
的作业,而不是
。应用
通常比较慢。

这应该可以:

df[0]= df[0].replace({'de': None})

这是最简单和最好的作品,是蟒蛇式的。谢谢