删除熊猫数据框中具有特定值的行[重复]
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
【讨论】:
以上是关于删除熊猫数据框中具有特定值的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章