删除熊猫数据框中具有特定值的行[重复]

Posted

技术标签:

【中文标题】删除熊猫数据框中具有特定值的行[重复]【英文标题】:Remove row with spesific value in pandas dataframe [duplicate] 【发布时间】:2019-11-12 01:54:28 【问题描述】:

我有一个这样的数据框:

value1       value2
aa7bbc       aaaa
ss           ss0
qqq          wwww
nn77         qqee

我想删除以下行:

有数字值 以nn开头 少于两个字符

我试过了:

df[~df.value1.str.contains(r'\d')]

但这并不能涵盖我需要的一切。解决这个问题的最有效方法是什么?

非常感谢

【问题讨论】:

这是什么意思 - has fewer than two characters? 【参考方案1】:

您只需要使用 OR 优化您的正则表达式以匹配任何条件。

r'(\d)|(^nn)|(^.?$)'

这是:

\d 表示包含的数字

^nn 以 nn 开头

^.?$ 用于 0-1 个字符(少于两个字符)。

试试这个:

import pandas as pd
from io import StringIO

df = pd.read_csv(StringIO("""
value1       value2
aa7bbc       aaaa
ss           ss0
qqq          wwww
nn77         qqee"""), sep=r"\s+")

df = df[~df.value1.str.contains(r'(\d)|(^nn)|(^.?$)')]

print(df)

输出:

  value1 value2
1     ss    ss0
2    qqq   wwww

【讨论】:

【参考方案2】:

使用运算符根据条件进行过滤

    df[ (~df.value1.str.contains(r'\d')) & (df.value1.str.len() < 2) & (df.value1.str.startswith('nn') ]

【讨论】:

【参考方案3】:
def has_digit(str):
     return any(char.isdigit() for char in str)

new_df=df[len(df['value1'])>=2 and not df['value1'].startswith("nn") and not has_digit(df['value1'])]

【讨论】:

【参考方案4】:

这是一种方法:

mask_no_digit =( ~df.value1.str.contains(r'\d')) & (~df.value2.str.contains(r'\d'))
mask_no_nn = (~df['value1'].str.startswith('nn')) & (~df['value2'].str.startswith('nn'))
mask_no_2_characters = (~df['value1'].str.len()<=2 ) & (~df['value2'].str.len()<=2)

df[mask_no_digit & mask_no_nn & mask_no_2_characters]

输出:

  value1 value2
2    qqq   wwww

【讨论】:

以上是关于删除熊猫数据框中具有特定值的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据条件表达式从熊猫数据框中删除行[重复]

如何根据条件表达式从熊猫数据框中删除行[重复]

从熊猫数据框中提取在特定列中具有特定值的所有行

基于具有列表值的多列删除数据框中的重复行[重复]

Pandas:如何根据特定列上特定值的条件选择数据框中的行[重复]

如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?