我没有得到匹配的字符串

问题描述 投票:1回答:2

这是我的数据,包含数字和字符串。

df2 = pd.DataFrame({'A': ['1,008$','4,000$','6,000$','10,00$','8,00$','45€','45€']})
df2 = pd.DataFrame(df2, columns = ['A'])
vv=df2[df2['A'].str.match('$')]

我想要这样的输出。

0  1,008$
1  4,000$
2  6,000$
3  10,00$
4   8,00$

但我得到这个输出:

Out[144]: 
Empty DataFrame
Columns: [A]
Index: []

谁能帮帮我吗?

python regex string pandas
2个回答
2
投票

使用Numpy的defchararray模块有点冗长的方式。 我总是想给予一些关注。

# Using @cᴏʟᴅsᴘᴇᴇᴅ's suggestion
# Same function as below but shorter namespace path

df2[np.char.find(df2.A.values.astype(str), '$') >= 0]

老答案

from numpy.core.defchararray import find

df2[find(df2.A.values.astype(str), '$') >= 0]

        A
0  1,008$
1  4,000$
2  6,000$
3  10,00$
4   8,00$

2
投票

str.match从一开始就开始匹配。但是,你的$模式只会在最后找到。

修复需要修改模式或更改功能。

选项1 str.match带有修改后的图案(所以\$最后匹配) -

df2[df2.A.str.match('.*\$$')]

        A
0  1,008$
1  4,000$
2  6,000$
3  10,00$
4   8,00$

如果您想具体说明匹配的内容,您只能匹配数字和逗号 -

df2[df2.A.str.match('[\d,]+\$$')]

        A
0  1,008$
1  4,000$
2  6,000$
3  10,00$
4   8,00$

请注意,这不会考虑列中的无效条目(只要它们在字符串中的某处具有这些字符,并且由$终止,它们就会匹配)。


选项2 str.contains

df2[df2.A.str.contains('\$$')]

        A
0  1,008$
1  4,000$
2  6,000$
3  10,00$
4   8,00$
© www.soinside.com 2019 - 2024. All rights reserved.