如果任何“单元格”匹配 3 个字符串之一,则寻找 Pythonic 方法来删​​除 Pandas

我正在寻找一种更Pythonic(并且更快!)的方法来清除任何行中具有三个字符串之一的任何行。我的代码可以工作,但是太慢了!


任何建议,将不胜感激!


# Check out each row

for i,row in df2.iterrows():

    for index in range(df2.shape[1]): 

        # Check out values in each column


        # if it's 98 or 99, drop it

        if df2.iloc[i,index] == '98.00':

            df2.drop(i)

            print('dropped row ', i, ' due to high value')

        elif df2.iloc[i,index] == '99.00':

            df2.drop(i)

            print('dropped row ', i, ' due to high value')                


        # or if the value is the default text null value, drop it

        elif df2.iloc[i,index] == '#NULL!':

            df2.drop(i)

            print('dropped row ', i, 'due to null value')


守候你守候我
浏览 99回答 4
4回答

素胚勾勒不出你

您可以使用isin方法:df = df[~df['COLUMN'].isin(['LIST','OF','STRINGS'])]

呼啦一阵风

我有点困惑,但您可以使用带有 |(或)的过滤器来存储要删除的行,然后在 df 上使用 drop 。例如:drop_row = df.loc[(df['some_column] > 某事) | (df['some_column] > 某事)df.drop(index = drop_row.index, inplace = True)

潇湘沐

isin结合any应该工作:df = df[~df.isin(["98.0", "99.0", "#NULL!"]).any(axis="columns")]

冉冉说

如果您想使用 drop() 和 isin() 函数(之前建议),我建议:df.drop(index=df[df.isin(["98.00", "99.00", "#NULL!"]).any(1)].index, inplace=True)这是一种更简短的表达方式:df.drop(index=df[((df == "98.00") | (df == "99.00") | (df == '#NULL!')).any(1)].index, inplace=True)下面描述一下代码的工作原理:首先选择验证任何请求条件的索引。然后,在 drop 函数中使用选择的索引来删除数据框中的相关行。要永久执行 df 中的放置,需要“inplace=True”。如果您只想将放置结果显示为临时(例如通过 print() 函数),则可以替换为“inplace=False”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python