Advertisement

数据处理:科学数据包pandas基本介绍

阅读量:

目录

  • 第一部分:pandas包
    • 一.pandas基本介绍
    • 二.pandas基本操作

第一部分:pandas包

一.pandas基本介绍

pandas:python里分析结构化数据的工具集。
基础是numpy:提供高性能矩阵运算
图形库matplotlib:提供数据可视化

二.pandas基本操作

1.一维、二维数组的创建和基本操作:

复制代码
    import numpy as np
    import pandas as pd
    s = pd.Series([1,2,3,4,np.NaN]) #pandas中的一维数据Series
    dates = pd.date_range('20200301',periods=6)
    # pandas中的二维数组DataFrame,行索引index,列索引columns
    
    #创建DataFrame方法一:
    data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('abcd'))
    data
    Out[12]: 
                   a         b         c         d
    2020-03-01  0.974217  1.415198  0.449173  0.309444
    2020-03-02 -0.783394  1.642082  1.929648 -1.730744
    2020-03-03 -1.412779  2.459838  0.793193  1.093348
    2020-03-04 -2.860147 -1.633533  1.972606 -1.106984
    2020-03-05  1.312970 -0.240283 -0.411076 -0.175680
    2020-03-06 -0.277543 -0.525772  0.556319  0.938473
    
    #创建DataFrame方法二:
    d = {'A':1,'B':pd.Timestamp('20200301'),'C':range(4)}
    df = pd.DataFrame(d,index = list('abcd'))
    df
    Out[16]: 
       A          B  C
    a  1 2020-03-01  0
    b  1 2020-03-01  1
    c  1 2020-03-01  2
    d  1 2020-03-01  3
    ------------------------
    df.head(2)  #输出前2行,默认5行
    Out[25]: 
       A          B  C
    a  1 2020-03-01  0
    b  1 2020-03-01  1
    df.tail(1)    #输出后1行,默认5行
    Out[26]: 
       A          B  C
    d  1 2020-03-01  3

对于一个二维数组df:
df.index----返回行索引
df.columns----返回列索引
df.values----返回值的数组
df.describe()----返回数组的一些数据

2.排序:
1)按照索引排序,axis=0按列索引,axis=1按行索引,acsending为升序排列,默认为True:

复制代码
    data.sort_index(axis=1,ascending=False)
    Out[30]: 
                   d         c         b         a
    2020-03-01  0.309444  0.449173  1.415198  0.974217
    2020-03-02 -1.730744  1.929648  1.642082 -0.783394
    2020-03-03  1.093348  0.793193  2.459838 -1.412779
    2020-03-04 -1.106984  1.972606 -1.633533 -2.860147
    2020-03-05 -0.175680 -0.411076 -0.240283  1.312970
    2020-03-06  0.938473  0.556319 -0.525772 -0.277543

2)按照数值排序:

复制代码
    data.sort_values(by='a')
    Out[34]: 
                   a         b         c         d
    2020-03-04 -2.860147 -1.633533  1.972606 -1.106984
    2020-03-03 -1.412779  2.459838  0.793193  1.093348
    2020-03-02 -0.783394  1.642082  1.929648 -1.730744
    2020-03-06 -0.277543 -0.525772  0.556319  0.938473
    2020-03-01  0.974217  1.415198  0.449173  0.309444
    2020-03-05  1.312970 -0.240283 -0.411076 -0.175680

3.选择:相比于速度较慢的位置索引data[2:4]方式,通过标签.loc()和数字.iloc()索引速度更快(省去了判断):

复制代码
    data.loc[:,['b','c']]
    Out[46]: 
                   b         c
    2020-03-01  1.415198  0.449173
    2020-03-02  1.642082  1.929648
    2020-03-03  2.459838  0.793193
    2020-03-04 -1.633533  1.972606
    2020-03-05 -0.240283 -0.411076
    2020-03-06 -0.525772  0.556319
    
    data.iloc[1:3,:3]
    Out[47]: 
                   a         b         c
    2020-03-02 -0.783394  1.642082  1.929648
    2020-03-03 -1.412779  2.459838  0.793193

4.对DataFrame数据的处理:

复制代码
    对于np.NaN(not a number)的处理,NaN不参与计算:
    df1.dropna(how='any')  #只要有NaN,整行舍弃
    df1.fillna(value=5)  #用数值替换NaN

5.关于.any()和.all()的区别:
.any()----将某个数列当做一个整体,有一个满足条件,则返回True
.all()----将某个数列当做一个整体,整体中每个都满足条件,则返回True
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述6.统计:
df1.mean(axis=1)----返回每行平均值的数组(默认axis=0,返回每列平均值)
df1.sum(axis=1)----返回每行数值之和的数组(默认axis=0,返回每列数值之和)
df.sub(s, axis=‘index’)----用二维数组df以列为单位减去s数组
df.apply(func)----传入函数,默认以每列数据为单位传入函数中(axis=0),apply函数会遍历每一行DataFrame的数据,返回一个Series数据结构

分组统计:
df.groupby(‘A’)或df.groupby([‘A’,‘B’])----以标签A,或标签A和B分组
在这里插入图片描述
在这里插入图片描述
7.数据合并:
1)纵向合并: pd.concat([xxx,xxx])
df1 = pd.concat([df.iloc[:3], df.iloc[3:7], df.iloc[7:]])
2)同列标签合并:pd.merge()
pd.merge(left, right, on=‘key’)----将left和right按照’key’合并
3)增加一行数据:
df.append(s,ignore_index=True)

8.数据透视:
1)pivot table/轴向旋转表:
pd.pivot_table(df, values=‘D’, index=[‘A’, ‘B’], columns=[‘C’])----对df进行操作,值为D一列的值,行索引为A和B列的值,列索引为C列的值。
在这里插入图片描述
在这里插入图片描述
2)df[df.A==‘one’].groupby(‘C’).mean()----对于df中的A列为one的行,以C列的值分组,返回D和E列的平均值。

9.时间序列:
rng = pd.date_range(‘20160301’, periods=600, freq=‘s’)----日期形式,周期为600,单位为s秒,freg默认为’D’,以天为单位。

10.category类别:

复制代码
    df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})
    df["grade"] = df["raw_grade"].astype("category")
    df["grade"].cat.categories
    out:Index([u'a', u'b', u'e'], dtype='object')
    df["grade"].cat.categories = ["very good", "good", "very bad"]
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~