pandas案例:旅游数据处理

任务详情

根据下方给出的全国旅游景点数据,完成以下任务:

  1. 使用 Pandas 读取全国旅游景点数据文件,使用 id 列作为索引;
  2. 去掉景点级别(level)字段(列)中数据的“景区”二字,字段中数据是 ‘\N’ 的情况不进行处理。如:‘4A景区’->‘4A’;
  3. 添加新的字段(列)‘city’,表示景点所在的省、市或自治区。比如:‘北京’,‘上海’,'江苏’等;
  4. 去掉所有的免费景点(price=0);
  5. 计算景点的销售额(price * sales),如果同一省、直辖市或自治区内的多个景点销售额相同,保留索引较小的景点,去掉其余景点;
  6. 添加新的字段(列)rank,对相同省、直辖市或自治区的景点的销售额进行排名操作(降序),并将排名结果添加到新的字段(列)rank 中,销售额较大的景点排名靠前;
  7. 注意:DataFrame 字段只包括:title,place,level,address,price,sales,city,rank 字段(列),索引为 id 字段(列)。

任务要求

  1. 程序不接收输入变量,返回结果的数据类型为 ‘pandas.DataFrame’;
  2. 全国旅游景点数据是以逗号分割的 csv 文件,utf-8编码;
  3. 提示:完成任务后,数据还剩 8 列 8991 条。

任务实现

import pandas


class Solution:
    def tripdata_process() -> 'pandas.DataFrame':
        url = "http://ws1.itmc.org.cn:80/JS00101/data/user/4799/85/fj_1844_scenic_spot.csv"
        # 读取数据,设置id列为行标签
        data = pandas.read_csv(url, sep=",", index_col=0)
        # 去掉景区级别列中的景区二字
        data["level"] = data["level"].str.strip("景区")
        # 添加city列,并截取内容填充
        data["city"] = data["place"].map(lambda x: x.split("·")[0])
        # 去掉所有免费景点
        data.drop(data[data["price"] == 0].index, inplace=True)
        # 添加临时汇总列
        data["jine"] = data["price"] * data["sales"]
        # 去掉同省市销售额相同的景点,只保留索引较小的景点
        data.drop_duplicates(subset=["city", "jine"], keep="first", inplace=True)
        # 根据省市、销售额排序
        data = data.sort_values(by=["city", "jine"], ascending=[True, False])
        # 添加排行列,根据省市排行
        data["rank"] = data["jine"].groupby(data["city"]).rank(ascending=False)
        # 删除临时列
        data.drop("jine", axis=1, inplace=True)
        
        return data

print(Solution.tripdata_process())

Guess you like

Origin blog.csdn.net/mighty13/article/details/121265761