【问题标题】:Lambda function for creating two different columns in pandas dataframes用于在熊猫数据框中创建两个不同列的 Lambda 函数
【发布时间】:2022-01-23 22:07:30
【问题描述】:

我有一个带有基于 HTML 的文本字段的 pandas 数据框,我想从中派生两个字段;其中的标签数量和没有任何标签的干净文本。我正在使用 BeautifulSoup 来执行这些功能。说,

df_ads['content_elements_cnt'] = df_ads['content'].apply(lambda x: dict(Counter([element.name for element in BeautifulSoup(x).html if element.name != None])))
df_ads['content_refined'] = df_ads['content'].apply(lambda x : BeautifulSoup(x).text)

如果我可以将以上两条语句封装在一个函数中,是否可以在apply函数中调用它以生成两列(我想利用BeautifulSoup实例化并只为一个循环)。换句话说,有没有一种有效的方法来完成这两个操作?

【问题讨论】:

  • 你能提供一个数据集的最小可重现示例吗?

标签: python pandas dataframe


【解决方案1】:

您可以使用辅助函数并返回一个系列:

def bs_extract(x):
    soup = BeautifulSoup(x)
    return pd.Series({'content_elements_cnt': dict(Counter([element.name for element in soup.html if element.name != None])),
                      'content_refined': soup.text})

df_ads[['content_elements_cnt', 'content_refined']] = df_ads['content'].apply(bs_extract)

注意。代码未经测试(未提供输入)

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 2013-02-13
    • 1970-01-01
    • 2018-07-10
    • 2018-04-11
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2019-07-30
    相关资源
    最近更新 更多