我正在寻找一种快速有效地过滤数据框列并删除不满足条件的值的方法。
假设我有一个数字为4、5和10的列,我想对该列进行过滤,并将大于7的任何数字替换为0。我该怎么做呢?
发布于 2020-05-31 19:43:29
有很多选择。一种可能性是如果然后..。是np.where
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': [1, 200, 4, 5, 6, 11],
'y': [4, 5, 10, 24, 4 , 3]})
df['y'] = np.where(df['y'] > 7, 0, df['y'])
发布于 2020-05-31 19:48:33
你说的是两件不同的事情--过滤和值替换。它们都有用途,并且在本质上是相似的,但对于过滤,我将指出this great answer。
假设我们的数据框名为df
,如下所示
A B
1 4 10
2 4 2
3 10 1
4 5 9
5 10 3
列A
符合您关于只有4、5、10值的列的语句。如果您想用0替换大于7的数字,可以这样做:
df["A"] = [0 if x > 7 else x for x in df["A"]]
如果你通读右边,它清楚地解释了它在做什么。它有助于包括括号来分隔“做什么”和“你正在做什么”:
df["A"] = [(0 if x > 7 else x) for x in df["A"]]
如果您想对多个列进行操作,那么利用zip
可以轻松地完成此操作。例如,如果需要列A
和B
的总和,则:
df["sum"] = [x[0] + x[1] for x in zip(df["A"], df["B"])]
覆盖data时要小心-这会删除信息。将转换后的数据放在其他列中是一种很好的做法,这样您就可以在某些东西不可避免地变得不可靠时进行追溯。
https://stackoverflow.com/questions/62120883
复制相似问题