如何删除具有特定条件的行? [复制]
Posted
技术标签:
【中文标题】如何删除具有特定条件的行? [复制]【英文标题】: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。 另外,追溯的值错误
【问题讨论】:
【参考方案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 中说他需要 &
【讨论】:
但我仍然有收入 = 0 的行 @박인아 我编辑了我的答案,请查看 让我们continue this discussion in chat.以上是关于如何删除具有特定条件的行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章