我想从该字符串中提取“ Twitter for iPhone”部分。 但是在一个数据框的数千列中,“ iPhone的Twitter”的位置却有不同的值。我只需要以下字符串集中的“>”之后和“ <”之前的值。
我尝试了df.col.str.extract('(iPhone的Twitter |三星的Twitter |其他人的Twitter)'),它仅提取那些“ iPhone的Twitter”值,而不提取其他值,其余的都用NaN填充
答案 0 :(得分:2)
执行@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
的代码吗?
答案 1 :(得分:1)
尝试df.col.str.extract(pat = '(Twitter for (iPhone|Samsung|others))')
答案 2 :(得分:0)
您可以将col.str.split()
与正则表达式模式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