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()

  • 相关阅读:
    Java实现 LeetCode 69 x的平方根
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 66 加一
    Java实现 LeetCode 66 加一
    CxSkinButton按钮皮肤类
  • 原文地址:https://www.cnblogs.com/moady/p/5847183.html
Copyright © 2011-2022 走看看