Python 'in' 函数,pandas 数据框错误填充
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 是布尔值)
我的逻辑-
如果该行中有 "Verified page",我将附加 True。
否则为假。
但在这种情况下,所有行中都有 "Verified Page",但它会转到 else 部分。
Python 中是否有任何功能可以帮助我更有效地完成它或以更好的方式达到预期的结果?
看起来你的 page_verified
变量实际上是一个列表,这就是你检查 returns 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]
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 是布尔值)
我的逻辑- 如果该行中有 "Verified page",我将附加 True。 否则为假。
但在这种情况下,所有行中都有 "Verified Page",但它会转到 else 部分。
Python 中是否有任何功能可以帮助我更有效地完成它或以更好的方式达到预期的结果?
看起来你的 page_verified
变量实际上是一个列表,这就是你检查 returns 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]