数据科学库-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()

posted on 2019-10-02 23:10  zhuome  阅读(126)  评论(0)    收藏  举报