zoukankan      html  css  js  c++  java
  • python之pandas模块

    一、pandas模块是基于Numpy模块的,pandas的主要数据结构是Series和DadaFrame,下面引入这样的约定:

    from pandas import Series,DataFrame

    import pandas as pd

    二、主要数据结构对象

    1.Series是一种类似一维数组的对象,由一组数据(各种numpy数据类型)与其相对应的数据标签组成(即索引)组成。可以通过其values和index属性来获取其数组表示形式和索引对象:

    >>> from pandas import Series,DataFrame
    >>> import pandas as pd
    >>> obj=Series([1,3,5,7],index=['a','b','c','d'])
    >>> obj
    a 1
    b 3
    c 5
    d 7
    dtype: int64
    >>> obj.values
    array([1, 3, 5, 7], dtype=int64)
    >>> obj.index
    Index(['a', 'b', 'c', 'd'], dtype='object')

    可以通过索引的方式选取Series中的单一值或一组值:

    >>> obj[['a','c']]
    a 1
    c 5
    dtype: int64

    Series可以看成是一个定长的字典,因为它是索引值到数据值的一个映射。它可以用在许多原本需要字典参数的函数中:

    >>> 'a' in obj
    True
    >>> 1 in obj
    False

    如果数据放在一个字典中,你可以直接用过这个字典创建series;

    >>> sdata={'Ohio':3500,'Texas':7100,'Oregon':1600,'Utah':500}
    >>> obj2=Series(sdata)
    >>> obj2
    Ohio 3500
    Oregon 1600
    Texas 7100
    Utah 500
    dtype: int64

    如果只传入一个字典,那么Series重的索引就是原字典的键:

    >>> states=['California','Ohio','Orgen','Texas']
    >>> obj3=Series(sdata,index=states)
    >>> obj3
    California NaN
    Ohio 3500.0
    Orgen NaN
    Texas 7100.0
    dtype: float64

    在此例中,sdata中跟states索引中相匹配的值会被找出来放在相应的位置上。(NaN表示缺失值)

    Series的一个重要功能就是在算术运算中会自动对齐不同索引的数据。 

    >>> obj2+obj3
    California NaN
    Ohio 7000.0
    Oregon NaN
    Orgen NaN
    Texas 14200.0
    Utah NaN
    dtype: float64

    2.DataFrame是一个表格型的数据结构,它含有一组有序的列,每列的数据类型可以不一样。DataFrame既有行索引,也有列索引,可以看做是由Series组成的字典(共用一个索引)。

    创建数据框时会自动建立索引如下:

    >>> data={'states':['Ohio','Ohio','Ohio','Nevada','Nevada'],
    'year':[2000,2001,2002,2001,2002],
    'pop':[1.6,1.7,3.6,2.4,2.9]}
    >>> from pandas import Series,DataFrame
    >>> import pandas as pd
    >>> frame=DataFrame(data)
    >>> frame
    pop states year
    0 1.6 Ohio 2000
    1 1.7 Ohio 2001
    2 3.6 Ohio 2002
    3 2.4 Nevada 2001
    4 2.9 Nevada 2002

    如果指定了列顺序,那么DataFrame就会按照指定的列顺序进行排列:

    >>> DataFrame(data,columns=['year','states','pop'])
    year states pop
    0 2000 Ohio 1.6
    1 2001 Ohio 1.7
    2 2002 Ohio 3.6
    3 2001 Nevada 2.4
    4 2002 Nevada 2.9

    可以通过字典标记或属性的方式,将DataFrame的列获取为一个Series:

    >>> frame['year']
    0 2000
    1 2001
    2 2002
    3 2001
    4 2002
    Name: year, dtype: int64
    >>> frame.year
    0 2000
    1 2001
    2 2002
    3 2001
    4 2002
    Name: year, dtype: int64

    返回的Series拥有跟原DataFrame相同的索引号,其name属性也被相应的设置好了。

    行可以通过位置或名称的方式进行获取,比如用索引字段ix:

    >>> frame.ix[3]
    pop 2.4
    states Nevada
    year 2001
    Name: 3, dtype: object

    为不存在的列赋值相当于创建一个新列,del关键字用于删除

    >>> frame['eastern']=frame.states
    >>> frame
    pop states year eastern
    0 1.6 Ohio 2000 Ohio
    1 1.7 Ohio 2001 Ohio
    2 3.6 Ohio 2002 Ohio
    3 2.4 Nevada 2001 Nevada
    4 2.9 Nevada 2002 Nevada
    >>> del frame['eastern']

    >>> frame.columns
    Index(['pop', 'states', 'year'], dtype='object')

     三、数据处理

    1.读取和写出数据

    a.读取csv数据和excel数据,读取出来的数据都是DataFrame结构

    df=pd.read_csv('wenjian.csv')

    df=pd.read_excel('wenjian.xlsx','sheet1')

    b.写出数据

    df.to_csv('newwenjian.csv')

    df.to_excel('newwenjian.excel',sheet_name='sheet2')

    2.查看读取的数据

    df.head(5)  #查看前5行数据

    df.tail(5)  #查看后5行数据

    df.columns  #查看列名称

    3.对数据框的列名重命名

    a. df2=df.rename(columns={'old_columnname':'new_columnname'}) #这个方法会在命名新的列时会创建一个新的数据框

    b. df.rename(columns={'old_columnname':'new_columnname'},inplace=True) #这个方法可以在已存在的数据框上修改

    4.选取列或者行

    a. df.['cloumnname1',cloumnname2']  #选取子数据框

    b.过滤记录

    df[df['column1']>10]

    df[(df['column1']>10)&df['column2']==30)]

    df[(df['column1']>10)|df['column2']==30)]

    5.处理缺失数据

    a。df.dropna() #删除含有缺失值的行或列

    b。填充缺失值

    df.fillna(value=5) #用5填充缺失值

    mean=df['column1'].mean()

    df['column1'].fillna(mean)

    6.创建新的列

    df.['newcolumn1']=df.['column2'] #新的列是column2的复制

    df.['newcolumn2']=df.['column2']+10 #对column2加10,再创建新的列

    df.['newcolumn3']=df.['column1']+df.['column2'] #将列1和列2的元素相加,然后创建新的列

    7.聚合函数

    a。 groupby允许对数据进行3种操作

    将数据进行分组、对每个组单独应用一个函数、对数据结果进行组合

    df.groupby('column1').sum()

    df.groupby('column1','column2').count()

    b.建立数据透视表,同excel一样,有3个元素:index,cloumns和values

    pd.pivot_table(df,values='column1',index=['column2','column3'],columns=['column4'])

    默认情况下,values是对列进行求和,可以通过aggfunc属性进行更改

    pd.pivot_table(df,values='column1',index=['column2','column3'],columns=['column4'],aggfunc=len) #计数

    c。列联表

    pd.crosstab(df.column1,df.cloumn2)

    8.数据框的链接(类似sql查询)

    a. Concatenate连接函数  pd.concat([df1,df2])

    b. Merge函数:可以左连接,右连接和内连接

    pd.merge(df1,df2,on='column1',how='inner')

    pd.merge(df1,df2,on='column1',how='left')

    pd.merge(df1,df2,on='column1',how='right')

    pd.merge(df1,df2,on='column1',how='outer')

    9。对数据框或者其列或者其元素应用函数

    a。map函数:对一个series的每个元素进迭代运用这个函数

    df['column1'].map(lambda x:10+x) #对column1的每个元素加10

    df['column2'].map(lambda x:'AV'+x) #合并“AV”和column2的每个元素(列的格式是string)

    b。apply函数:沿着任何轴应用某个函数

    df[['column1','column2']].apply(sum) #返回column1和column2的和

    c。applymap函数:可以对数据框的每个元素应用这个函数

    func=lambda x:x+2

    df.applymap(func)

    10.识别唯一值

    df.['column1'].unique() #返回column1的唯一值

    11.基本的统计描述

    a.describe函数:会返回数据集的(计数,均值,方差,最小值,最大值等基本统计描述指标)

    df.describe()

    b.covariance函数:协方差

    df.cov()

    c.correlation函数:相关系数

    df.corr()

  • 相关阅读:
    sleep(),wait(),yield(),notify()
    (三)终结任务
    (二)共享受限资源
    (一)基本的线程机制
    (十八)多线程
    (十七)泛型程序设计
    视频监控中带宽及存储容量的计算
    turtle实例
    python ——钟表
    Python Tkinter Grid布局管理器详解
  • 原文地址:https://www.cnblogs.com/moady/p/5847183.html
Copyright © 2011-2022 走看看