【问题标题】:How can I delete the row having specific contiditon? [duplicate]如何删除具有特定条件的行? [复制]
【发布时间】:2021-04-01 22:41:49
【问题描述】:

我想从电影表中删除列 'revenue' = 0 或 'Budget' = 0 的行 所以我尝试了这段代码。

movies[(movies['revenue'] == 0) or (movies['Budget'] == 0)]

然后,我得到一个值错误

所以我也尝试了这段代码

columns = ['budget', 'revenue']
df = movies.replace(0, pd.np.nan).dropna(axis=0, how='any', subset = columns).fillna(0).astype(int)

我也收到了一个未来警告“pandas.np 模块已弃用,将在未来版本中从 pandas 中删除。直接导入 numpy。 另外,追溯的值错误

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    试试这个,并使用|按位运算符(表示or):

    new = movies[(movies['revenue'] != 0) | (movies['budget'] != 0)]  
    

    该代码将创建一个新的df,其中包含列中非 0 或预算中非 0 的行。

    注意!= 表示不相等。有关运营商的更多信息,我发现这个链接很清楚:https://www.w3schools.com/python/python_operators.asp

    【讨论】:

      【解决方案2】:

      您需要更改以下行 -

      drop_idx = movies[(movies['revenue'] == 0) or (movies['Budget'] == 0)].index
      

      drop_idx = movies[(movies['revenue'] == 0) | (movies['Budget'] == 0)].index
      

      一旦你有了删除索引,你就可以使用drop 删除索引

      movies = movies.drop(index=drop_idx)
      

      【讨论】:

      • 我试过了,但我得到了一个 KeyError: "['id' 'imdb_id' 'popularity' 'budget' 'revenue' 'original_title' 'cast'\n 'homepage' 'director' 'tagline' 'keywords' 'overview' 'runtime' 'genres'\n 'production_companies' 'release_date' 'vote_count' 'vote_average'\n 'release_year' 'budget_adj' 'revenue_adj' 'movies_count'] 在轴上找不到"
      • 已更新答案以纠正此错误
      【解决方案3】:

      你不能在那里使用or 运算符,你必须使用逻辑或| 符号:

      movies = movies[(movies['revenue'] == 0) & (movies['Budget'] == 0)]
      

      编辑:

      如果要删除带有0 的行,请尝试使用~ 符号:

      movies = movies[~(movies['revenue'] == 0) & ~(movies['Budget'] == 0)]
      

      我使用 &,因为 OP 在 cmets 中说他需要 &

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多