【发布时间】:2017-08-14 19:55:24
【问题描述】:
我目前有一个带有 beautiful_soup 列的 Pandas DataFrame(它包含一个 BeautifulSoup 对象)。我想为几个 HTML 标签添加一列(例如img 标签的数量)。
例如,这是我使用列表理解的旧代码:
df['text_img_count'] = [len(x.find_all('img')) for x in df['beautiful_soup']]
但是使用apply应该更快,所以我想转换这段代码。
我正在考虑编写一个可以传递给apply 的小函数,例如:
def get_imgs_count():
然后我会这样称呼它:
df['text_img_count'] = df['beautiful_soup'].apply(get_imgs_count)
因为我要为一堆 HTML 标签做这个,我真的不想写一大堆超级相似的函数。宁愿写这样的东西:
def get_tag_count(df, tag)
然后这样称呼它:
get_tag_count(df, 'img')
但我认为我不能将带参数的函数传递给 apply...
我该如何从列表理解转换为使用apply?
谢谢!
【问题讨论】:
-
"但是使用 apply 应该更快," 你为什么会这样认为?确实,我愿意等价的列表理解比
.apply -
确实,如果 speed 是您不想要的,那么您已经使用
dtype=object打了自己的脚 -
无论如何,你可以将参数传递给你传递给
.apply的函数,在.apply方法中使用args关键字。
标签: python pandas beautifulsoup