用 Pandas 做 ETL,不要太快
久违了,朋友们,来篇干货。
ETL 的全称是 extract, transform, load,意思就是:提取、转换、 加载。ETL 是数据分析中的基础工作,获取非结构化或难以使用的数据,把它变为干净、结构化的数据,比如导出 csv 文件,为后续的分析提供数据基础。
1、提取数据
这里从电影数据 API 请求数据。在开始之前,你需要获得 API 密钥来访问 API可以在这里[1]找到获取密钥的说明。
一旦你有了密钥,需要确保你用 没有把它直接放入你的源代码中,因此你需要创建 ETL 脚本的同一目录中创建一个名为 config.py 的文件,将此放入文件:
#config.py
api_key =
如果要将代码发布到任何地方,应该将 config.py 放入 .gitignore 或类似文件中,以确保它不会被推送到任何远程存储库中。
还可以将 API 密钥存储为环境变量,或使用其他方法隐藏它。目标是保护它不暴露在 ETL 脚本中。
现在创建一个名为 tPamdb.py 的文件,并导入必要的依赖:
import pandas as pd
import requests
import config
向 API 发送单个 GET 请求的方法。在响应中,我们收到一条 JSON 记录,其中包含我们指定的 movie_id:
API_KEY = config.api_key
url = 'https://api.themoviedb.org/3/movie/{}?api_key={}'.fndormat(movie_id, API_KEY)
r = requests.get(url)
这里我们请求 6 部电影,电影 movie_id 从 550 到 555 不等。我们创建一个循环,一次请求每部电影一部,并将响应附加到列表中:
response_list = []
API_KEY = config.api_key
for movie_id in range(550,556):
url = 'https://api.themoviedb.asorg/3/movie/{}?api_key={}'.format(movie_id, API_KEY)
r = requests.get(url)
response_list.append(r.json())
现在我们拿到了 response_list 这样复杂冗长的 JSON 数据,这里使用 from_dict() 从记录中创建 Pandas 的 DataFrame 对象:
df = pd.DataFrame.f 做rom_dict(response_list)
如果在 jupyter 上输出一下 df,你会看到这样一个数据帧:
至此,数据提取完毕。
2、转换
我们并不需要提取数据的所有这些列,所以接下来选择我们需要使用的列。
假如以下列是我们感兴趣的:
budget
id
imdb_id
genres
original_title
release_date
revenue
runtime
创建一个名为 df_columns 的列名称列表,以便 E从主数据帧中选择所需的列。
df_columns = ['budget', 'genres', 'id', 'imdb_id', 'original_title', 'release_date', 'revenue', 'runtime']
请注意,有一个 genres 列(表示电影的体裁,类型)是长这样的:
这是一个 JSON 格式的列,我们希望扩展它。
一种比较直观的方法是将 genres 内的分类分解为多个列,如果某个电影属于这个分类TL,那么就在该列赋值 1,否则就置 0,就像这样:
现在我们用 pandas 来实现这个扩展效果。
首先扁平化这个 JSON 列表:
genres_list = df['genres'].tolist()
flat_list = [item for sublist in genres_list for item in sublist]
接下来,我们创建一个 genres_all 的临时列,作为电影类别的代表,我们只需要 genres 内的 name 属性,稍,不后把它扩展为单独的列:
result = []
for l in genres_list:
r = []
for d in l:
r.append(d['name'])
result.append(r)
df = df.assign(genres_all=result)
为了完整的保存 genres 类型表,我们把它单独做为一个表:电影类型表:
df_genres = pd.DataFrame.from_records(flat_list).drop要太_duplicates()
它是这样的:
接下来,将类型名称附加到 df_columns 中,然后删除 genres 列:
df_columns = ['budget', 'id', 'imdb_id', 'original_title', 'release_date', 'revenue', 'runtime']
df_genre_columns = df_genres['name'].to_list()
df_columns.用 extend(df_genre_columns)
s = df['genres_all'].explode()
df = df.join(pd.crosstab(s.index, s))
代码的最后两行,使用了 explode、crosstab 函数来扩展多个列,其效果就是如果电影属于某个类型,该行的值就为 1,结果就是这样:
关于日期时间,我们希望将日期扩展为年、月、日、周,像这样:
那么以下代码就是干这个的:
df['Parelease_date'] = pd.to_datetime(df['release_date'])
df['day'] = df['release_date'].dt.day
df['month'] = df['release_date'].dt.month
df['year'] = df['release_date'].dt.year
df['day_of_week'] = df['release_date'].dt.dnday_name()
df_time_columns = ['id', 'release_date', 'day', 'month', 'year', 'day_of_week']3、加载
加载就很简单了,将 DataFrame 导出到 excel 或者 csv 即可。
df[df_columns].to_csv('tmdb_movies.csv', index=False)
df_genres.to_csv('tmdb_genres.ascsv', index=False)
df[df_time_columns].to_csv('tmdb_datetimes.csv', index=False)
如果要导出 excel,那么就用 to_excel 函数。
最后的话
Pandas 是处理 excel 或者数据分析的利器,ETL 必备工具,本文以电影数据为例,分享了 Pandas 的常见用法。
(责任编辑:营养保健)
-
新浪科技讯 1月12日上午消息,据报道,2014年苹果启动了造车项目,自此之后,该公司经历了很多次错误,在2016年至2019年间,该项目裁掉了数百名员工,原因是成本快速膨胀,该公司也改变了其重点,从...[详细]
-
让神经网络给符号AI打工,MIT和IBM联合解决深度学习痛点
本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。 现在的AI是神经网络的天下,但科学家们正在尝试将神经网络与“老式AI”结合。 这里说的“老式AI”是上世纪70年代流行的“...[详细]
-
云安全日报210425:IBM数据保护平台发现执行任意代码漏洞,需要尽快升级
IBM Spectrum Protect(前称Tivoli Storage Manager)是IBM公司的一套数据保护平台。该平台为企业提供单一控制和管理点,并支持对所有规模的虚拟、物理和云环境进行备...[详细]
-
这个CV数据集生成器火了,支持13类CV任务,DeepMind等打造
本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。 这年头,AI玩家们想找到合适的图像数据集,简直是越来越难了。 不仅数据质量参差不齐,合适的数据类型也难找(如光流图、深度图...[详细]
-
云梦级11月24日云梦级消息,港交所官网显示,京东工业股份有限公司(简称“京东工业”)通过港交所聆讯。当前,京东集团、达达集团、京东健康、京东物流及德邦股份均已上市,若京东工业顺利上市,它将成为刘强东...[详细]
-
核心思想可以简单总结为:整个神经网络内的每种可观察的现象,都可以通过神经网络进行建模。从这个角度来看,宇宙自身在广义上也可能是个硕大无朋的神经网络。 明尼苏达州德卢斯大学物理学教授Vitaly Van...[详细]
-
OpenAI ChatGPT Go套餐全面进军亚洲!每月不到5美元
OpenAI 近日宣布,将其超实惠的 ChatGPT Go 套餐扩展至亚洲的16个新国家,这个套餐的月费不到5美元,极具吸引力。此次扩展覆盖了阿富汗、孟加拉国、不丹、文莱、柬埔寨、老挝、马来西亚、马尔...[详细]
-
Canalys:第二季度小米手机销量超越苹果首次晋升全球第二
新浪科技讯 北京时间7月16日凌晨消息,Canalys发布了第二季度全球智能手机市占率排名,小米手机销量超越了苹果,首次晋升全球第二,三星排名第一位,OPPO和Vivo分别为第三第四位,数据显示,小米...[详细]
-
云梦级11月12日云梦级消息,宁德时代董事长曾毓群在2025世界动力电池大会上表示,今年前三季度,以电动汽车、锂电池、光伏电池为代表的“新三样”出口总额超过9000亿元,其中锂电池贡献近4000亿元,...[详细]
-
云安全日报210315:Ubuntu配套Python发现执行任意代码漏洞,需要尽快升级
Ubuntu是一个以桌面应用为主的Linux操作系统。它是一个开放源代码的自由软件,提供了一个健壮、功能丰富的计算环境,既适合家庭使用又适用于商业环境。Ubuntu为全球数百个公司提供商业支持。 3月...[详细]
- https://www.wilsonart.com/catalogsearch/result/?action=CHECK&q=谷歌蜘蛛池租用【tg:seogoogle987】,LsP
- https://www.springfieldlibrary.org/?s=谷歌蜘蛛池租用【tg:seogoogle987】,wTy
- https://www.lechzuers.com/de/search?cat=163&q=谷歌蜘蛛池租用【tg:seogoogle987】,vpG
- https://www.oprny.com/search.php?search_query=谷歌蜘蛛池租用【tg:seogoogle987】,DZc
- https://www2.ual.es/ProyectoLates/?s=谷歌蜘蛛池租用【tg:seogoogle987】,6BZ
- https://www.ussalabama.com/?action=CHECK&s=谷歌蜘蛛池租用【tg:seogoogle987】,fYB
- https://www.mexperience.com/?T=1686132112324&s=谷歌蜘蛛池租用【tg:seogoogle987】,O2C
- https://www.ntv.co.jp/3min/search/?action=QUERY&q=谷歌蜘蛛池租用【tg:seogoogle987】,0ti
- https://www.so.com/s?ie=utf-8&src=360sou_home&_re=0&q=谷歌蜘蛛池租用【tg:seogoogle987】,4bV
- https://www.vivaraise.fr/catalogsearch/result/?q=谷歌蜘蛛池租用【tg:seogoogle987】,WdN

标签: 薇美铺 WeMakePrice 趣天Qoo10 电商平台
OpenAI 推出 Privacy Filter:全新 PII 脱敏模型开源上线
模糊的指标掩盖了云计算企业价值 投资人更关注股票而非业绩
标签: 美团骑手 屏蔽功能 恶意用户
马斯克与扎克伯格密谋收购 OpenAI?Meta 被要求提供证据
