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})
这是最简单和最好的作品,是蟒蛇式的。谢谢