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

2024-10-01 17:28:16 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我从存储在变量errorData中的dataframe中选择了行。当我显示此变量时,将显示正确的行(即,选择似乎有效)。我的目标是只将与变量中的条件匹配的行替换为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。这意味着它不是只编辑变量数据中选定的行,我看不出原因


Tags: intruedffornpnanngloc
2条回答

我从来没有回答过我自己的问题!但我在这里找到了答案:

Selecting with complex criteria from pandas.DataFrame

对于任何想知道解决方案是什么的人来说,这个问题的第一个回答中的代码格式在我的情况下是有效的:

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

为此:

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

相关问题 更多 >

    热门问题