首页 > 解决方案 > 我有一个函数,但我想了解以下代码行在做什么

问题描述

我从 api 请求中获得了一个 json 文件,并使用 json_normalize 将其转换为数据帧。其中一列,即“venue.categories”包含字典列表。它看起来像这样:

nearby_venues.loc[0,'venue.categories']

    [{'id': '4bf58dd8d48988d16a941735',
  'name': 'Bakery',
  'pluralName': 'Bakeries',
  'shortName': 'Bakery',
  'icon': {'prefix': 'https://ss3.4sqi.net/img/categories_v2/food/bakery_',
   'suffix': '.png'},
  'primary': True}]

我想要一个只有短名称的新列,即“Bakery”作为列值。下面的函数完成了这项工作。我需要了解幕后发生的事情。

def get_category_type(row):
    try:
        categories_list = row['categories']
    except:
        categories_list = row['venue.categories']

    if len(categories_list) == 0:
        return None
    else:
        return categories_list[0]['name']

标签: pythonfunctiondataframedictionarydata-science

解决方案


第一个代码块:

    try:
        categories_list = row['categories']
    except:
        categories_list = row['venue.categories']

正在做一个列的副本categories,如果失败则venue.categories放入变量categories_list中。

第二块:

    if len(categories_list) == 0:
        return None
    else:
        return categories_list[0]['name']

return None,如果列没有数据,否则返回列表的第一个元素(只有一个),然后返回key字典内的值。


推荐阅读