首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫-在几个条件下使用对象DType过滤Col

熊猫-在几个条件下使用对象DType过滤Col
EN

Stack Overflow用户
提问于 2019-01-22 16:38:13
回答 3查看 144关注 0票数 4

我在df中有一个带有对象dtype的列。我有一些困难的过滤只是那些与$xxxxxxx和计算机辅助设计在价格领域。

代码语言:javascript
运行
复制
Price
$1,000,000
$2,000,000
$700,000
1,234,567 CAD
$111,111
3,000,000 EUR
Inquire
$500,000
Auction

我尝试过,但没有成功:

代码语言:javascript
运行
复制
df = df[(df['Price'].str.contains('$')) | (df['Price'].str.contains('CAD'))]

如果我只想要民航处,这是可行的:

代码语言:javascript
运行
复制
df = df[df['Price'].str.contains('CAD')

但是,如何用$和CAD来获得所有的值?因此,删除3在我的样本数据以上(欧元,查询,拍卖)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-22 16:47:26

尝试使用\作为转义字符,|用于或操作。默认使用regex的模式的pd.Series.str.contains

代码语言:javascript
运行
复制
df[df['Price'].str.contains('\$|CAD')]

输出:

代码语言:javascript
运行
复制
           Price
0     $1,000,000
1     $2,000,000
2       $700,000
3  1,234,567 CAD
4       $111,111
7       $500,000

而且,如果您也想要捕获“EUR”,请使用另一个|

代码语言:javascript
运行
复制
df[df['Price'].str.contains('\$|CAD|EUR')]
票数 2
EN

Stack Overflow用户

发布于 2019-01-22 16:44:47

$是regex中的一个特殊字符,pd.Series.str.contains默认启用regex。您可以禁用regex、使用re.escape或通过\转义。

代码语言:javascript
运行
复制
import re

# choose one of the below    
m1 = df['Price'].str.contains('$', regex=False)  # disable regex, most efficient
m1 = df['Price'].str.contains(re.escape('$'))    # escape via re.escape
m1 = df['Price'].str.contains('\$')              # escape via \

# turn off regex when not required for a performance boost
m2 = df['Price'].str.contains('CAD', regex=False)

print(df[m1 | m2])

           Price
0     $1,000,000
1     $2,000,000
2       $700,000
3  1,234,567 CAD
4       $111,111
7       $500,000

最适合使用regex的是re.escape。例如:

代码语言:javascript
运行
复制
L = ['$', 'CAD']
search_str = '|'.join(map(re.escape, L))
df = df[df['Price'].str.contains(search_str)]
票数 2
EN

Stack Overflow用户

发布于 2019-01-22 17:25:38

我看到,我们已经有了专家的答案,但这只是为了子孙后代而采取的另一种方法。

代码语言:javascript
运行
复制
>>> df[ df['Price'].str.startswith('$') | df['Price'].str.endswith('CAD') ]
           Price
0     $1,000,000
1     $2,000,000
2       $700,000
3  1,234,567 CAD
4       $111,111
7       $500,000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54312720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档