0. 序言web
Costco 是全球第一家会员制的仓储批发卖场,中文翻译过来叫「开市客」或「好市多」,始创于 1976 年的美国加州,截止到 2019 年 1 月,有 736 家门店,9270 万会员,年营业额 1310 亿美圆,会员续费率 90%,全球拥有 24 万名员工。app
2019 年 8 月 27 日,中国大陆第一家 Costco 在上海开业,由于人满为患,Costco 实行限流,将卖场人数控制在 2000 人之内,有人早上 4:30 就去排队。ide
Costco 把零售效率作到极致,是零售企业学习的标杆。函数
做为数据分析师,也要学习 Costco 死磕本身、为用户创造价值的精神。学习
下面,咱们从网上读取一些 Costco 的股价数据,学习用 Python 对这些数据进行转换,为未来的数据分析作好准备。spa
首先,咱们从网页中读取Costco 的历史股价数据。翻译
而后,咱们对数据进行清洗,获得一个干净整洁的数据表格。3d
接下来,咱们就能够正式开始对数据进行转换。orm
1. 如何转换为时间?字符串
使用 transform() 函数,结合 dateutil 模块中的 parse() 函数,咱们能够将字符转换为时间。
大部分常见的字符形式,均可以使用 parse() 进行转换,例如:
须要注意的是,要防止出现意外状况,例如:parse('80') 的结果是 1980 年的当前日期,若是这不是你想要的结果,那么在转换以前,建议把相应的字符串写得更具体明确一些。
使用 pd.to_datetime() 函数,不只能将字符转换为时间,并且能将数值转换为时间,还能指定时间单位和起始日期等参数,例如:
2. 如何转换为数值?
使用 pd.to_numeric() 函数,结合自由度比较高的 apply() 函数,咱们能够实现将每一列都强制转换为数值,没法转换的元素用 nan 表示。
其中 errors='coerce' 是 pd.to_numeric() 函数的一个参数,若是把 coerce 替换为 ignore,那么将忽略没法转换的元素,让其保持原样。
3. 如何转换为字符?
使用 astype() 函数,咱们能够实现数据类型的相互转换。好比说,下面的代码实现把数据框所有转换为字符型。
对于时间型的数据,咱们可使用 strftime() 函数,转换为指定的字符格式,例如:
4. 如何转换为区间?
使用 pd.cut() 函数,咱们能够将数值切割为指定的区间,例如:
其中 right = True 表明左开右闭,默认为 False,即左闭右开。
咱们可使用 labels 参数,为每一个区间指定想要显示的内容,例如:
若是把 bins 参数定义为一个整数,那么数值将被切割为等分的区间。
5. 如何作分组转换?
结合使用 groupby() 和 transform() 函数,咱们能够在行数保持不变的状况下,对某列进行分组求和,例如:
这样分组转换数据的好处是,可以方便地计算每一个数据对应各自分组的占比。好比说,下面代码的计算结果是:天天成交量占当月总成交量的比例。
若是使用 apply() 函数,那么返回结果会聚合成 5 行。
如何使用 agg() 函数,那么返回的结果也是聚合成 5 行,并且能够同时应用多个函数。
Pandas 从 0.25 版本开始,agg() 函数获得加强,能够对多个不一样的列,应用不一样的函数,并对聚合的结果进行自定义命名。
好比说,相似于 Excel 中经典的数据透视表功能,咱们可使用下面的代码,实现按月份分组,同时对日期进行计数、对开盘价求平均值和最大值、对成交量求和。
能够看出,与 Excel 相比,Python 的功能要强大不少,灵活运用相关函数,可以明显提高数据分析的效率。
6. 如何标准化转换?
为了消除单位量纲的影响,让不一样变量之间可以进行对比分析,咱们能够对数据进行标准化转换,0-1 标准化是一种经常使用的标准化转换的方法。好比说,下面的代码实现了 Costco 开盘价的 0-1 标准化。
通过 0-1 标准化转换以后,原来的最小值变成 0,原来的最大值变成 1,其余的值都变成了介于 0 到 1 之间的值。
7. 小结
最后,咱们仍是用一张思惟导图,对转换数据的方法作个小结。