You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pandas中如何删除包含[removed]、[deleted]字符串的数据行?

解决Pandas移除包含[deleted]/[removed]行的问题

你遇到的问题很典型——你执行了筛选操作,但没有把筛选后的结果重新赋值回你的DataFrame,所以原始的df根本没有被修改,保存后自然还是能看到那些目标行。

让我一步步帮你修正:

为什么你的代码没生效?

你现在的代码是这样的:

df[df["Comments"].str.contains("deleted")==False]
df[df["Comments"].str.contains("removed")==False]

这两行代码只是生成了筛选后的临时DataFrame,但你没有把它们赋值给df(或者其他变量),所以原始的df完全没变化。而且就算你分开赋值,第二次筛选会覆盖第一次的结果,导致只移除了包含removed的行,漏掉deleted的。

正确的解法

我们可以把两个条件合并,一次性筛选掉包含任意一个关键词的行,并且把结果赋值回df

方法1:合并条件,用|表示“或”

# 筛选出既不包含"deleted"也不包含"removed"的行
df = df[~(df["Comments"].str.contains("deleted") | df["Comments"].str.contains("removed"))]

这里的~是Pandas里的取反操作,相当于==False,写法更简洁。

方法2:用单个str.contains匹配多个关键词

更高效的方式是用正则表达式,在str.contains里一次性匹配两个关键词:

# 用正则|匹配任意一个关键词,同时处理可能的空值(na=False)
df = df[~df["Comments"].str.contains(r'\[deleted\]|\[removed\]', na=False)]

这里加r'\[deleted\]'是因为方括号在正则里是特殊字符,需要转义;na=False是用来处理Comments列可能存在的空值(NaN),避免筛选时出现报错或者漏行。

方法3:分步处理(如果需要保留中间步骤)

如果你想分步处理,记得每一步都要赋值:

# 先移除包含deleted的行
df = df[df["Comments"].str.contains("deleted") == False]
# 再移除包含removed的行
df = df[df["Comments"].str.contains("removed") == False]

不过这种方式效率不如一次性合并条件高,尤其是数据量大的时候。

完整修正后的代码

把你的完整代码修改后应该是这样:

import pandas as pd
sol2020 = pd.read_csv("Solana_2020_Comments_Time_Adjusted.csv")
sol2021 = pd.read_csv("Solana_2021_Comments_Time_Adjusted.csv")
df = pd.concat([sol2021, sol2020], ignore_index=True, sort=False)

# 关键修正:移除包含[deleted]或[removed]的行,并重新赋值给df
df = df[~df["Comments"].str.contains(r'\[deleted\]|\[removed\]', na=False)]

# 之后再保存你的df
# df.to_csv("your_output_file.csv", index=False)

额外提醒

如果你的Comments列存在空值(NaN),一定要加上na=False参数,否则str.contains遇到NaN会返回NaN,这些行在筛选时会被自动排除(因为NaN在布尔判断里被视为False),可能会导致你意外丢失一些数据。

内容的提问来源于stack exchange,提问作者coder888

火山引擎 最新活动