[英]Python 'in' function , pandas dataframe wrongly populated
from collections import defaultdict
import csv
from bs4 import BeautifulSoup
import urllib2
import pandas as pd
import re
text = open("/Users/dynajose/Desktop/PlayList.rtf").read()
songDom = BeautifulSoup(text)
data=defaultdict(list)
musicData=defaultdict(list)
f_music = songDom.find_all("div", {"class" : "_gx6 _agv"})
for music in f_music:
try:
Name_title = music.find("a","_gx7")
data['Name'].append(Name_title.text)
except:
data['Name'].append("")
try:
type_title = music.find("div","_1fs8 fsm fwn fcg")
data['Type'].append(type_title.text)
except:
data['Type'].append("")
for link_music in f_music:
variable=link_music.find('a', href=re.compile('^https:'))['href']
data['Link'].append(variable)
for verified_page in f_music:
for page in verified_page:
page_verified = page.find_all('span',{'aria-label':'Verified Page'})
#print page_verified
check= "Verified Page"
for a in page_verified :
if check in a :
musicData['Link'].append(True)
else :
musicData['Link'].append(False)
#if sum([True for a in page_verified if check in a]) > 1:
# musicData['Link'].append(True)
#else :
# musicData['Link'].append(False)
#df = pd.DataFrame(data)
dr= pd.DataFrame(musicData)
#df
dr
期望的结果-因此,如果页面经过验证,我希望DataFrame列为True。 是否通过span标签和aria-label标签定义了页面是否经过验证。 (DataFrame是布尔值)
我的逻辑-如果该行中包含“已验证的页面”,我会附加True。 否则错。
但是在这种情况下,所有行都具有“已验证页面”,但它转到了其他部分。
Python中是否有任何功能可以帮助我更有效地执行此功能,或者有任何更好的方法来实现所需的结果?
看起来您的page_verified
变量实际上是一个列表,这就是为什么您的检查返回false的原因。
范例:
l = ['ab']
'a' in l
False
如果返回的列表始终包含一个元素,请执行
if check in page_verified[0]:
如果返回的列表可以是多个元素,则可以尝试类似的操作(可能是一种更好的方法,但可以使用)
if sum([True for a in page_verified if check in a]) > 1:
**编辑**
请提供此输出,以便我们获得更多信息
for music in f_music:
for verified_page in f_music:
for page in verified_page:
page_verified = page.find_all('span',{'aria-label':'Verified Page'})
print page_verified
check= "Verified Page"
print page_verified[0]
print type(page_verified[0])
print check in page_verified[0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.