选择存储在变量中的DF行。我如何仅对这些行进行操作?

时间:2019-03-06 21:02:24

标签: python pandas dataframe data-analysis

说,我可以从存储在变量errorData中的数据框中选择行。当我显示此变量时,将显示正确的行(即选择似乎有效)。我的目标是仅将符合我变量中条件的行替换为np.nan

errorData = df.loc[(df['Percent'] == 100) &\
                  (df['Rating1'] != 8) &\
                  (df['Rating2'] != 1)&\
                  (df['Grade'] == "NG")]

for i in errorData:
        df['Percent'].replace(df['Percent']==100, np.nan,inplace=True)

但是,这似乎不起作用。在执行此操作后,每当我再次报告百分比列时,也会从

中删除100的值
df['Grade'] == "B"

我也尝试了其他几种方法,例如:

for i in errorData:
        df['Percent'].replace(100, np.nan,inplace=True)

但同样,无济于事。抱歉,我没有在此处发布示例行。我已经在其他问题上看到了这一点,但是我不确定它的格式。

对于上述任何错误,我们深表歉意。

更新:如果要执行,请进一步澄清

df.loc[(df['Percent'] == 100) &\
                  (df['Rating1'] != 8) &\
                  (df['Rating2'] != 1)&\
                  (df['Grade'] == "NG")].shape

它返回(129,8)-即我的有效行。

如果我执行

df['Percent'].isnull().sum()

在更改之前,我将收到0,但在更改之后,我将收到400。这意味着只能编辑在变量erroneousData中选择的行,而我看不到原因。

2 个答案:

答案 0 :(得分:0)

我以前从未回答自己的问题!但我在这里找到了答案:

Selecting with complex criteria from pandas.DataFrame

对于任何想知道解决方案是什么的人,该问题中第一个回答的代码格式适用于我的情况:

df.loc[(df["Percent"] == 100) & (df["Rating1"] != 8) &\
      (df["Rating2"] != 1) & (df['Grade'] == "NG"), "Percent"] = np.nan

答案 1 :(得分:0)

与此:

df.loc[(df['Percent'] == 100) &\
       (df['Rating1'] != 8) &\
       (df['Rating2'] != 1)&\
       (df['Grade'] == "NG")]

您要从符合此条件的行中选择所有列。

由于更改仅会在Percent列上进行,因此应将其传递到.loc。这样,您可以直接进行设置。

df.loc[(df['Percent'] == 100) &\
       (df['Rating1'] != 8) &\
       (df['Rating2'] != 1)&\
       (df['Grade'] == "NG"), 'Percent'] = np.nan