在 pd.dataframe 系列上使用 .find()
Using .find() on a pd.dataframe series
我有以下 df:
data = {'Org': ['<a href="/00xO" target="_blank">Chocolate</a>'],
'Owner': ['Charlie']
}
df = pd.DataFrame(data)
print (df)
当我应用下面的 lamba 函数而不是给我 'Chocolate' 时,它返回 0。
df['Correct Org']=df['Org'].apply(lambda st: st[st.find(">"):st.find("<")])
我试过按如下方式添加 'str':
df['Correct Org']=df['Org'].str.apply(lambda st: st[st.find(">")+1:st.find("<")])
& 得到以下错误:
AttributeError: 'StringMethods' object has no attribute 'apply'
使用 BeautifulSoup
解析 html 标签:
from bs4 import BeautifulSoup
df['Correct Org']=df['Org'].apply(lambda st: ','.join(BeautifulSoup(st, features="lxml").findAll(text=True)))
你得到 None 返回,因为 df['Org'][0].find(">")
returns 31 但 df['Org'][0].find("<")
returns 0。所以不清楚 st[st.find(">"):st.find("<")
是什么方法。可以使用bs4.BeautifulSoup
创建一个soup对象,直接获取a
里面的文字:
from bs4 import BeautifulSoup
df['Org'] = df['Org'].apply(lambda x: BeautifulSoup(x).text)
输出:
Org Owner
0 Chocolate Charlie
如果你不想用BeautifulSoup,我写了一个简单的函数给你
获取LINK文本的函数
def getOrg(link):
link = str(link)
link = link[link.find('>'):link.find("</")]
return link.replace(link[0], '')
例如
import pandas as pd
data = {'Org': ['<a href="/00xO" target="_blank">Chocolate</a>'],
'Owner': ['Charlie']
}
df = pd.DataFrame(data)
# Function Call
getOrg(df['Org'])
输出
Chocolate
我有以下 df:
data = {'Org': ['<a href="/00xO" target="_blank">Chocolate</a>'],
'Owner': ['Charlie']
}
df = pd.DataFrame(data)
print (df)
当我应用下面的 lamba 函数而不是给我 'Chocolate' 时,它返回 0。
df['Correct Org']=df['Org'].apply(lambda st: st[st.find(">"):st.find("<")])
我试过按如下方式添加 'str':
df['Correct Org']=df['Org'].str.apply(lambda st: st[st.find(">")+1:st.find("<")])
& 得到以下错误:
AttributeError: 'StringMethods' object has no attribute 'apply'
使用 BeautifulSoup
解析 html 标签:
from bs4 import BeautifulSoup
df['Correct Org']=df['Org'].apply(lambda st: ','.join(BeautifulSoup(st, features="lxml").findAll(text=True)))
你得到 None 返回,因为 df['Org'][0].find(">")
returns 31 但 df['Org'][0].find("<")
returns 0。所以不清楚 st[st.find(">"):st.find("<")
是什么方法。可以使用bs4.BeautifulSoup
创建一个soup对象,直接获取a
里面的文字:
from bs4 import BeautifulSoup
df['Org'] = df['Org'].apply(lambda x: BeautifulSoup(x).text)
输出:
Org Owner
0 Chocolate Charlie
如果你不想用BeautifulSoup,我写了一个简单的函数给你
获取LINK文本的函数
def getOrg(link):
link = str(link)
link = link[link.find('>'):link.find("</")]
return link.replace(link[0], '')
例如
import pandas as pd
data = {'Org': ['<a href="/00xO" target="_blank">Chocolate</a>'],
'Owner': ['Charlie']
}
df = pd.DataFrame(data)
# Function Call
getOrg(df['Org'])
输出
Chocolate