首页 > 解决方案 > 如何从 yelp_academic_dataset_business.json 创建另一个 csv 文件,其中仅包含酒店、餐厅或两者的业务?

问题描述

1如何从 yelp_academic_dataset_business.json 创建另一个 csv 文件,其中仅包含酒店、餐厅或这两个类别的业务?

原始的 yelp 业务数据集包含只有牙医、美发沙龙等的行。我想选择酒店、餐馆和两者的业务。

我刚开始学习 python,正在学习机器学习实验的教程。下面的代码给了我一个错误。我用谷歌搜索并阅读了很多,但仍然不明白。任何帮助将不胜感激。

yelp_academic_dataset_business.csv 的样子

代码和错误消息的图像

data2 = []
with open('yelp_academic_dataset_business.json') as f:
    for line in f:
        data2.append(json.loads(line))
len(data2)

business_id = []
city = []
state = []
stars = []
review_count = []
categories = []
postal_code = []
latitude = []
longitude = []
pricerange = []
is_open = []
name = []


for entry in range(0, len(data2)): 
    if "Restaurants" in data2[entry]["categories"]:
        business_id.append(data2[entry]['business_id'])
        name.append(data2[entry]['name'])
        city.append(data2[entry]['city'])
        state.append(data2[entry]['state'])
        stars.append(data2[entry]['stars'])
        postal_code.append(data2[entry]['postal_code'])
        review_count.append(data2[entry]['review_count'])
        categories.append(data2[entry]['categories'])
        latitude.append(data2[entry]['latitude'])
        longitude.append(data2[entry]['longitude'])
        is_open.append(data2[entry]['is_open'])
        if 'RestaurantsPriceRange2'in data2[entry]['attributes']:
            pricerange.append(data2[entry]['attributes']['RestaurantsPriceRange2'])
        else:
            pricerange.append(0)

data2 = {'business_id ':business_id,'name':name,'city':city,'state':state,'stars':stars,'review_count':review_count,
    'categories':categories,'latitude':latitude,'longitude':longitude,'is_open':is_open,'pricerange':pricerange,'postal_code':postal_code}

business_data = pd.DataFrame(data2)

标签: pythondatasetdata-cleaning

解决方案


此错误意味着您正在对 None 对象进行迭代。

基本上data2[entry]['attributes']不是一个列表,而是一个None

所以当你这样做时

if 'RestaurantsPriceRange2'in data2[entry]['attributes']:

您无法检查元素是否在列表中,因为它不是列表。

所以你必须先检查它是否是一个列表。正确的线是

if data2[entry]['attributes'] and 
   'RestaurantsPriceRange2'in data2[entry]['attributes']:

推荐阅读