将自定义功能应用于熊猫df

Chique_Code

我定义了以下函数,该函数在嵌套字典中搜索特定键的值。

def get_recursively(search_dict, field):

    fields_found = []

    if len(search_dict) == 1:
        search_dict = search_dict[0]

    for key, value in search_dict.items():

        if key == field:
            fields_found.append(value)

        elif isinstance(value, dict):
            results = get_recursively(value, field)
            for result in results:
                fields_found.append(result)

        elif isinstance(value, list):
            for item in value:
                if isinstance(item, dict):
                    more_results = get_recursively(item, field)
                    for another_result in more_results:
                        fields_found.append(another_result)

    return fields_found

现在让我们说我想将此函数应用于pandas df中的一列,并将结果保存在新列中。我的数据如下所示:

id              metadata                    field
123             {"dek": "fashion...}        frontend
124.            {"dek": "house...}          frontend

我尝试了以下代码:

df['NewCol'] = df.apply(lambda x: get_recursively(x['metadata'], x['field']), axis=1)

因此,在这种情况下,我将传递列metadatafield作为“前端”的列值我遇到一个错误:KeyError: (0, 'occurred at index 2')当我在一个嵌套字典中测试我的函数时,该字典保存在一个变量中,它恰好给了我所需的东西,这就是键的值-前端。我在这里做错了什么?

下面提供了我正在处理的嵌套字典的示例:

{"dek": "<p>Don\'t forget to buy a card</p>", "links": {"edit": {"dev": "//patty-menshealth.feature.hearstapps.net/en/content/edit/76517422-96ad-4b5c-a24a-c080c58bce0c", "prod": "//patty-menshealth.prod.hearstapps.com/en/content/edit/76517422-96ad-4b5c-a24a-c080c58bce0c", "stage": "//patty-menshealth.stage.hearstapps.net/en/content/edit/76517422-96ad-4b5c-a24a-c080c58bce0c"}, "frontend": {"dev": "//menshealth.feature.hearstapps.net/trending-news/a19521193/fathers-day-weekend-plans/", "prod": "//www.menshealth.com/trending-news/a19521193/fathers-day-weekend-plans/", "stage": "//menshealth.stage.hearstapps.net/trending-news/a19521193/fathers-day-weekend-plans/"}}, "header": {"title_color": 1, "title_layout": 1}, "sponsor": {"program_type": 1, "tracking_urls": []}, "social_dek": "<p>Don\'t forget to buy a card</p>", "auto_social": 0, "index_title": "\u200bWeekend Guide: Treat Your Dad Right This Father\'s Day", "short_title": "Treat Your Dad Right This Father\'s Day", "social_title": "\u200bWeekend Guide: Treat Your Dad Right This Father\'s Day", "editors_notes": "<p>nid: 2801076<br>created_date: 2017-06-16 13:00:01<br>compass_feed_date: 2017-06-21 14:01:58<br>contract_id: 40</p>", "seo_meta_title": "Treat Your Dad Right This Father\'s Day\u200b | Men’s Health", "social_share_url": "/trending-news/a19521193/fathers-day-weekend-plans/", "seo_related_links": {}, "editor_attribution": "by", "hide_from_homepage": 1, "syndication_rights": 3, "seo_meta_description": "\u200bFrom gifts to food ideas, we\'ve got your Father\'s Day covered. Just don\'t forget to buy him a card."}

关键错误似乎是由第一个if语句引起的:

if len(search_dict) == 1:
    search_dict = search_dict[0]

我在使用Dict类型检查时遇到了问题,并选择尝试使用collections.Mapping而不是dict。我测试了下面的解决方案,它似乎可以工作。

import collections

def get_recursively(search_dict, field):

    fields_found = []
    for key, value in search_dict.items():

        if key == field:
            fields_found.append(value)

        elif isinstance(value, collections.Mapping):
            results = get_recursively(value, field)
            for result in results:
                fields_found.append(result)

        elif isinstance(value, list):
            for item in value:
                if isinstance(item, dict):
                    more_results = get_recursively(item, field)
                    for another_result in more_results:
                        fields_found.append(another_result)

    return fields_found

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将自定义累积功能应用于熊猫

来自分类Dev

将自定义累积功能应用于熊猫

来自分类Dev

熊猫groupby将自定义功能应用于每个组

来自分类Dev

熊猫滚动应用于自定义功能

来自分类Dev

将自定义累积函数应用于熊猫数据框

来自分类Dev

如何将自定义函数应用于熊猫数据框的2列?

来自分类Dev

将自定义numba njit函数应用于熊猫滚动对象

来自分类Dev

将自定义主题应用于Odoo应用

来自分类Dev

如何将自定义滚动功能应用于pandas groupby?

来自分类Dev

如何将自定义滚动功能应用于pandas groupby?

来自分类Dev

将自定义样式应用于微调器

来自分类Dev

无法将自定义listSelector应用于ListView

来自分类Dev

将自定义函数应用于数据框

来自分类Dev

如何将自定义主题应用于Google自定义搜索?

来自分类Dev

如何将自定义字体应用于Android应用中的每个TextView

来自分类Dev

将自定义属性应用于“代码优先实体”框架对象

来自分类Dev

将自定义函数应用于具有通用名称的任何数据集

来自分类Dev

AngularJs有条件地将自定义指令应用于HTML

来自分类Dev

如何将自定义样式应用于SwitchCompat

来自分类Dev

如何将自定义字体应用于TTTAttributedLabel

来自分类Dev

将自定义样式应用于页面上的所有按钮

来自分类Dev

将自定义主题应用于PreferenceFragment中的ActionBar

来自分类Dev

如何在PyMC中将自定义函数应用于变量?

来自分类Dev

如何在phoenix框架中将自定义验证规则应用于模型

来自分类Dev

如何将自定义材质设计主题应用于Bootstrap组件

来自分类Dev

将自定义函数应用于pandas Series会产生AttributeError

来自分类Dev

如何仅将自定义属性应用于元素?

来自分类Dev

将自定义函数应用于r中的每一行

来自分类Dev

将自定义排序应用于打字稿中的对象数组

Related 相关文章

  1. 1

    将自定义累积功能应用于熊猫

  2. 2

    将自定义累积功能应用于熊猫

  3. 3

    熊猫groupby将自定义功能应用于每个组

  4. 4

    熊猫滚动应用于自定义功能

  5. 5

    将自定义累积函数应用于熊猫数据框

  6. 6

    如何将自定义函数应用于熊猫数据框的2列?

  7. 7

    将自定义numba njit函数应用于熊猫滚动对象

  8. 8

    将自定义主题应用于Odoo应用

  9. 9

    如何将自定义滚动功能应用于pandas groupby?

  10. 10

    如何将自定义滚动功能应用于pandas groupby?

  11. 11

    将自定义样式应用于微调器

  12. 12

    无法将自定义listSelector应用于ListView

  13. 13

    将自定义函数应用于数据框

  14. 14

    如何将自定义主题应用于Google自定义搜索?

  15. 15

    如何将自定义字体应用于Android应用中的每个TextView

  16. 16

    将自定义属性应用于“代码优先实体”框架对象

  17. 17

    将自定义函数应用于具有通用名称的任何数据集

  18. 18

    AngularJs有条件地将自定义指令应用于HTML

  19. 19

    如何将自定义样式应用于SwitchCompat

  20. 20

    如何将自定义字体应用于TTTAttributedLabel

  21. 21

    将自定义样式应用于页面上的所有按钮

  22. 22

    将自定义主题应用于PreferenceFragment中的ActionBar

  23. 23

    如何在PyMC中将自定义函数应用于变量?

  24. 24

    如何在phoenix框架中将自定义验证规则应用于模型

  25. 25

    如何将自定义材质设计主题应用于Bootstrap组件

  26. 26

    将自定义函数应用于pandas Series会产生AttributeError

  27. 27

    如何仅将自定义属性应用于元素?

  28. 28

    将自定义函数应用于r中的每一行

  29. 29

    将自定义排序应用于打字稿中的对象数组

热门标签

归档