熊猫|如何有效过滤列

时间:2020-05-31 18:40:50

标签: dataframe

我正在寻找一种快速有效地过滤数据框列并删除不符合条件的值的方法。

说,我有一列包含数字4、5和10。我想过滤该列,并用0替换7以上的任何数字。

2 个答案:

答案 0 :(得分:0)

有很多选择。如果...的一种可能性是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'])

答案 1 :(得分:0)

您要谈论的是两个独立的部分-过滤和值替换。它们都有用途,最终在本质上相似,但是对于过滤,我将指向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值的列的语句。如果要将7以上的数字替换为0,则可以这样做:

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可以轻松地完成操作。例如,如果您想要列AB的总和,则:

df["sum"] = [x[0] + x[1] for x in zip(df["A"], df["B"])]

覆盖数据时要小心-这会删除信息。将转换后的数据放在其他列中是一个好习惯,这样您就可以在不可避免的情况下追溯过去。

相关问题