如何使用python转换数据?
案例分析:
2019年8月27日,中国大陆第一家COSTCO在上海开业,由于人满为患,costcoa实行限制人流,将人数控制在
2000以内。Costco把零售效率做到极致,是零售企业学习标杆。作为数据分析师,也要学习Costco为用户创造价值的精神。
下面以网上读取一些Costco股价数据,学习用python对这些数据进行转换,为将来数据分析做准备。
##首先从网页读取Costco历史股价数据
代码如下:
import numpy as np
import pandas as pd
import ssl
pd.set_option('max_rows',10) #设置最多显示10行
pd.set_option('display.float_format',lambda x:'%.2f' % x)#禁用科学计数法
ssl._create_default_https_context = ssl._create_unverified_context #防止SSL报错
url = 'https://finance.yahoo.com/quote/COST/history?p=COST' #网址
dfs = pd.read_html(url) #读取网页数据
df = dfs[0] #获取网页中第一个表格
df
结果如下:
##然后对数据进行清洗
代码如下:
# 清洗过滤无效数据
df = df[~(df.Date.str.contains('Close')| df.Open.str.contains('Dividend'))]
df
结果如下:
接下来,就依据读取的网页数据,对其进行数据转换。
数据转换分为以下几种:
###
1、转换时间
2、转换为数值
3、转换为字符
4、转换为区间
5、分组转换
6、标准化转换
###
1、如何转换时间
##使用 transform()函数,结合dateutil模块中的parse()函数,将字符串转换为时间。
代码如下:
from dateutil.parser import parse
dfc = df.copy() #拷贝一个副本做临时操作
dfc['时间'] = df.Date.transform(parse).copy()
dfc
显示如下:
### 使用pd.to_datetime()函数转换
代码如下:
pd.to_datetime(df.Date)
结果如下:
2、如何转换为数值
### 使用pd.to_numeric()函数,结合apply()函数,实现将每一列都强制转换为数值,
无法转换的元素用nan表示。
代码如下:
df.apply(pd.to_numeric,errors = 'coerce') #强制转换为数值
结果如下:
其中errors='coerce'是pd.to_numeric()函数的一个参数,如果
把coerce转换为ignore,那么将忽略无法转换的元素,让其保持原样。
3、如何转换为字符
###使用astype()函数,可以实现数据类型的相互转换。
下面代码实现把数据框全部转换为字符型
df.astype(str).dtypes
#对于时间型的数据,使用strftime()函数,转换为指定的字符格式
# 将时间转换为月份
dfc['月份'] = dfc.时间.dt.strftime('%Y年%m月')
dfc
4、如何转换为区间?
#使用pd.cut()函数,可以将数值切割为指定的区间。
5、如何做分组转换?
##使用groupby()和transform()函数,在行数保持不变的情况下,对某列进行分组求和。
例如:
#分组求和---相同月份分组后求和
dfc.groupby('月份')['Volume'].transform(sum)
#计算每个数据对应各自分组的占比
dfc.Volume / dfc.groupby('月份')['Volume'].transform(sum) *100
使用apply()函数,返回如下:
使用agg()函数,可以同时应用多个函数
6、如何标准化转换?
##0-1标准化
小结: