我想从内容字符串中提取特定模式:"<a href=" http://twitter.com/download/iphone " rel=" nofollow ">Twitter for i



我想从此字符串中提取" iPhone"部分。但是,在数据框架中的1000列中,我在" Twitter for iPhone"的位置有不同的值。我只需要">"one_answers"&lt;"之前的值。从以下一组字符串。

我尝试了df.col.str.Extract('('(iPhone | twitter for samsung for shothers for ershots for twitter(('(('(仅提取这些" twitter for iPhone"值,但没有提取其他'twitter,其余的则填充了NANS。

实现 @cmmcd的评论,此代码:

import pandas as pd
a = ["""<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>""",
 """<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for Cats</a>"""
    ]
df = pd.DataFrame(a,columns=['WebLinks'])

df['WebLinks'].str.extract(r">(.*?)<")

返回此结果:

0   Twitter for iPhone
1   Twitter for Cats

发生的事情是r">(.*?)<"的意思是"将图案的正则符合匹配的截止标签(>(和打开标签(<(匹配的任何内容"。我不建议您摆脱这种方法的标签。

如果这不起作用,您可以发布给您nans的代码吗?

尝试df.col.str.extract(pat = '(Twitter for (iPhone|Samsung|others))')

您可以将col.str.split()与Regex模式r'<|>'一起使用,以获取列中的元素列表并选择所需的元素(请注意,假设整个数据元素是提供的字符串((

twits=['<a href=”http://twitter.com/download/iphone“ rel=”nofollow“>Twitter for iPhone</a>',
      '<a href=”http://twitter.com/download/iphone“ rel=”nofollow“>Twitter for Samsung</a>',
      '<a href=”http://twitter.com/download/iphone“ rel=”nofollow“>Twitter for Others</a>']
ser=pd.Series([np.random.choice(twits,1)[0] for i in range(10)])
ser.str.split(r'<|>').str[2]
0    Twitter for Samsung
1     Twitter for iPhone
2     Twitter for iPhone
3     Twitter for Others
4     Twitter for iPhone
5     Twitter for Others
6     Twitter for Others
7    Twitter for Samsung
8     Twitter for iPhone
9     Twitter for Others

最新更新