数据科学库-day3
1 pandas索引
对于Series,可以直接通过索引访问其中的值,如:
s=pd.Series(np.array([1,2,3,4]),index=['a','b','a','b'])
s[‘a’]
对于DataFrame,则需要使用loc,如:
s=pd.DataFrame(np.array([[1,2],[3,4],[5,6]],index=[‘a’,’b’,’a’])
s.loc[‘b’]
2,重复索引
判断:要判断是否含有重复索引,可以使用is_unique函数,如:
s.is_unique
获取重复索引中的一份,可以使用unique函数,如:
s1=s.unique()
重复索引的处理,可以使用groupby函数,如:
s2=s.groupby(s.index).sum()
3,多级索引
3.1 Series
多级索引的创建可以使用MultiIndex函数,如:
a1=[[‘a’,’b’,’a’,’c’,’b’,’b’],[1,2,2,3,1,2]]
a2=list(zip(*a1))
index=pd.MultiIndex.from_tuples(a2,names=[‘level1’,’level2’])
3.2 DataFrame
与Series稍有不同,如:
df=pd.DataFrame(np.random.randint(1,10,(6,3)),index=[[‘a’,’b’,’a’,’c’,’b’,’b’],[1,2,2,3,1,2]],columns=[[‘one’,’two’,’one’],[‘red’,’blue’,’red’]])
3.3 多级索引之间的交换
df.swaplevel(0)
3.4 根据索引排序
df.sortlevel(1)
3.5 根据索引进行运算
df.sum(level=0)
3.6 将列转换成索引
df.set_index(列名1,列名2…)
也可以将索引再换回去,如df.reset_index()
4 分组运算
基本过程:拆分—应用—合并
4.1 通过列表进行分组
示例:df.groupby(列名1,列名2,…).sum()
4.2 通过字典进行分组
df=pd.DataFrame(np.random.randint(1,10,(6,4)),columns=[‘a’,’b’,’c’,’d’])
mapping={‘a’:red,’b’:blue,’c’:red,’d’:blue}
df1=df.groupby(mapping,axis=1)
4.3 通过函数进行分组
基于索引,根据函数返回值分组
def _group(idx):
return idx
df.groupby(_group)
4.4 多级索引分组
不同级别的索引名字来进行分组,如:
df.groupby(level=索引名,axis=1)
5 聚合运算
5.1 内置聚合函数
sum,mean,min,max,describle
5.2 自定义聚合函数
def _group(s):
return s.max()-s.min()
df1.agg(_group)
注意:df1为分组后的结果
5.3 使用apply方法
def top(g,n=2,column=’data1’):
return g.sort_value(by=column,ascengding=False)[:,n]
df2=df.groupby(列名).apply(top)
6 数据导入和导出
6.1 数据导入
6.1.1 导入方法
pd.read_csv(文件路径)
pd.read_table(文件路径,sep=’,’)
pd.read_table比pd.read_csv更加灵活一些,它的sep可以支持正则表达式。
6.1.2 导入设置
在读入文件时,可以设定是否存在列标签,也可以指定将某些列作为行标签,如:
df=pd.read_csv(路径,header=None,index_col=[列名1,列名2,…])
6.1.3 缺失值处理
对于缺失的数据,pd.read_csv会自动将空缺,NA等作为缺失值处理,也可以自定义,如:
df=pd.read_csv(路径,na_values=[‘NA’,’NULL’,’foo’])
甚至可以采用字典方式,单独对于每个列进行设置
6.1.4 分块读取数据
分块读取数据使用chunksize参数,比如计算key中值的次数:
df=pd.read_csv(路径,chunksize=1000)
result=pd.Series([])
for chunk in df:
result=result.add(chunk[key].value_counts(),fill_value=0)
6.2 数据导出到磁盘
pd.to_csv(路径)
可以通过设置,不保存索引,如:pd.to_csv(路径,index=False)
7 时间序列
7.1两个常用的库
from datetime import datetime
from datetime import timedelta
7.2 定义一个时间
t1=datetime(2019,9,23)
7.3 时间转换
时间变字符串:
t1=datetime(2019,7,23)
t1.strftime(‘%Y/%m/%d %H:%M:%S’)
字符串变时间:
datetime.strptime(‘2019-7-12 9:20’,’%y-%m-%d %H:%M’)
7.4 生成时间序列
使用date_range:
pd.date_range(‘20190620’,’20190628’)
pd.date_range(‘20190620’,periods=10,freq=’M’)
使用period:
pd.period_range(‘2016-10’,periods=10,freq=’M’)
7.5 timestamp与period的相互转换
timestamp转换为period:
如:s=pd.Series(np.random.randint(5),index=pd.date_range(‘2016-04-01’,periods=5,freq=’D’))
调用:s.to_period(),还可以加上参数,s.to_period(freq=’M’)
同样的,对于period数据s1,s1.to_timestamp()可转换成时间戳
注意:一个是periods,一个是period!
7.6 时间重采样
7.6.1 降采样:高频到低频
ts.resample(采样周期,方式,时间值),如:
ts.resample(‘5min’,how=’sum’,label=’right’)
也可以使用groupby函数:
ts.groupby(lambda x:x.month).sum()
ts.groupby(ts.index.to_period(‘M’)).sum()
7.6.2 升采样:低频到高频
时间戳:ts.resample(‘D’,fill_method=’ffill’)
period:ts.resamle(‘A-DEC’,how=’sum’)
7.7 将文件中时间解析以便时间处理
df=pd.read_csv(路径,parse_dates=True)
8 数据可视化
画折线图:ts.plot(figsize=元组,style=颜色及线型,title=图名)
画散点图:ts.plot.scatter(x=’’,y=’’)
画柱状图:ts.plot.bar(stacked=True)
画直方图:ts.plot.hist(bins=20)
画饼图:ts.plot.pie()
浙公网安备 33010602011771号