这是我的数据,包含数字和字符串。
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: []
谁能帮帮我吗?
使用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$
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$