说,我可以从存储在变量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中选择的行,而我看不到原因。
答案 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