潮流时尚网
潮流时尚网
潮流时尚网 > 品牌 > 正文
现在我们用pandas来实现这个扩展效果
2022-02-22 16:04:01  来源:TechWeb  阅读量:15336   

久违了,朋友们,来篇干货。

现在我们用pandas来实现这个扩展效果

ETL 的全称是 extract, transform, load,意思就是:提取,转换, 加载ETL 是数据分析中的基础工作,获取非结构化或难以使用的数据,把它变为干净,结构化的数据,比如导出 csv 文件,为后续的分析提供数据基础

1,提取数据

这里从电影数据 API 请求数据在开始之前,你需要获得 API 密钥来访问 API可以在这里找到获取密钥的说明

一旦你有了密钥,需要确保你没有把它直接放入你的源代码中,因此你需要创建 ETL 脚本的同一目录中创建一个名为 config.py 的文件,将此放入文件:

#config.pyapi_key =

如果要将代码发布到任何地方,应该将 config.py 放入 .gitignore 或类似文件中,以确保它不会被推送到任何远程存储库中。

还可以将 API 密钥存储为环境变量,或使用其他方法隐藏它目标是保护它不暴露在 ETL 脚本中

现在创建一个名为 tmdb.py 的文件,并导入必要的依赖:

import pandas as pdimport requestsimport config

向 API 发送单个 GET 请求的方法。在响应中,我们收到一条 JSON 记录,其中包含我们指定的 movie_id:

这里我们请求 6 部电影,电影 movie_id 从 550 到 555 不等。我们创建一个循环,一次请求每部电影一部,并将响应附加到列表中:

现在我们拿到了 response_list 这样复杂冗长的 JSON 数据,这里使用 from_dict 从记录中创建 Pandas 的 DataFrame 对象:

df = pd.DataFrame.from_dict

如果在 jupyter 上输出一下 df,你会看到这样一个数据帧:

至此,数据提取完毕。

2,转换

我们并不需要提取数据的所有这些列,所以接下来选择我们需要使用的列。

假如以下列是我们感兴趣的:

budgetidimdb_idgenresoriginal_titlerelease_daterevenueruntime

创建一个名为 df_columns 的列名称列表,以便从主数据帧中选择所需的列。

df_columns =

请注意,有一个 genres 列是长这样的:

这是一个 JSON 格式的列,我们希望扩展它。

一种比较直观的方法是将 genres 内的分类分解为多个列,如果某个电影属于这个分类,那么就在该列赋值 1,否则就置 0,就像这样:

现在我们用 pandas 来实现这个扩展效果。

首先扁平化这个 JSON 列表:

genres_list = df.tolistflat_list =

接下来,我们创建一个 genres_all 的临时列,作为电影类别的代表,我们只需要 genres 内的 name 属性,稍后把它扩展为单独的列:

result = for l in genres_list: r = for d in l: r.append) result.append(r)df = df.assign(genres_all=result)

为了完整的保存 genres 类型表,我们把它单独做为一个表:电影类型表:

df_genres = pd.DataFrame.from_records.drop_duplicates

它是这样的:

接下来,将类型名称附加到 df_columns 中,然后删除 genres 列:

df_columns = df_genre_columns = df_genres('name').to_listdf_columns.extend(df_genre_columns)s = df('genres_all').explodedf = df.join(pd.crosstab(s.index, s))

关于日期时间,我们希望将日期扩展为年,月,日,周,像这样:

那么以下代码就是干这个的:

df = pd.to_datetime(df)df('day') = df.dt.daydf('month') = df.dt.monthdf('year') = df.dt.yeardf('day_of_week') = df.dt.day_namedf_time_columns = ('id', 'release_date', 'day', 'month', 'year', 'day_of_week')3,加载

加载就很简单了,将 DataFrame 导出到 excel 或者 csv 即可。

df.to_csv('tmdb_movies.csv', index=False)df_genres.to_csv('tmdb_genres.csv', index=False)df(df_time_columns).to_csv('tmdb_datetimes.csv', index=False)

如果要导出 excel,那么就用 to_excel 函数。

最后的话

Pandas 是处理 excel 或者数据分析的利器,ETL 必备工具,本文以电影数据为例,分享了 Pandas 的常见用法。


声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多企业信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。投资有风险,需谨慎。

上一篇:中央广播电视总台举办的第二届中国品牌强国盛典活动中中国移动入选十大国之重器品牌
下一篇:返回列表
为我推荐为我推荐
护肤新锐品牌植迷荟闪亮登场联合抖音美力溯源打开消费视野
护肤新锐品牌植迷荟闪亮登场联合抖音美力溯源打开消费视野
解构海洋力量,重塑年轻肌龄
解构海洋力量,重塑年轻肌龄
爱情的小美好值得ALLOVE钻石来诠释
爱情的小美好值得ALLOVE钻石来诠释
爆款预定!杨幂新剧《斛珠夫人》今晚开播引期待
爆款预定!杨幂新剧《斛珠夫人》今晚开播引期待
莎剧改编电影《罗莎琳》首张剧照
莎剧改编电影《罗莎琳》首张剧照
从北欧到中国,璐比奶粉2021进博会首秀 ,备受瞩目
从北欧到中国,璐比奶粉2021进博会首秀 ,备受瞩目
新儿纲中为何要新增儿童安全座椅领域?各界应如何响应并落实?
新儿纲中为何要新增儿童安全座椅领域?各界应如何响应并落实?
精细养护兴起,国内母婴洗护市场现新形势
精细养护兴起,国内母婴洗护市场现新形势
纪梵希美妆携手程潇“粉”爱三亚
纪梵希美妆携手程潇“粉”爱三亚
欧舒丹官宣全新品牌大使唐艺昕、张慧雯
欧舒丹官宣全新品牌大使唐艺昕、张慧雯
关于我们 - 版权声明 - 广告服务 - 联系我们
Copyright © 2018- www.cmzhl.cn All Rights Reserved.
鲁ICP备15032508号-1网站地图