zoukankan      html  css  js  c++  java
  • Python中pandas模块解析

    一、数据结构

    Pandas基于两种数据类型: series 与 dataframe 。

    1、Series

    一个series是一个一维的数据类型,其中每一个元素都有一个标签。类似于Numpy中元素带标签的数组。其中,标签可以是数字或者字符串。

    import numpy as np 
    import pandas as pd 
    s = pd.Series([1, 2, 5, np.nan, 6, 8]) 
    print(s) 
    '''
    输出:
    0    1.0 
    1    2.0 
    2    5.0 
    3    NaN 
    4    6.0 
    5    8.0 
    dtype: float64 
    '''

    2、DataFrame

    一个dataframe是一个二维的表结构。Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。你可以把它想象成一个series的字典项。

    #创建一个 DateFrame:
    #创建日期索引序列 
    dates =pd.date_range('20130101', periods=6) 
    print(type(dates)) 
    
    #创建Dataframe,其中 index 决定索引序列,columns 决定列名 
    df =pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) 
    print(df)
    
    '''
    输出:
    <class 'pandas.core.indexes.datetimes.DatetimeIndex'> 
                       A         B         C         D 
    2013-01-01  0.406575 -1.356139  0.188997 -1.308049 
    2013-01-02 -0.412154  0.123879  0.907458  0.201024 
    2013-01-03  0.576566 -1.875753  1.967512 -1.044405 
    2013-01-04  1.116106 -0.796381  0.432589  0.764339 
    2013-01-05 -1.851676  0.378964 -0.282481  0.296629 
    2013-01-06 -1.051984  0.960433 -1.313190 -0.093666 
    '''
    
    #字典创建 DataFrame
    df2 =pd.DataFrame({'A' : 1., 
       'B': pd.Timestamp('20130102'), 
       'C': pd.Series(1,index=list(range(4)),dtype='float32'), 
       'D': np.array([3]*4,dtype='int32'), 
       'E': pd.Categorical(["test","train","test","train"]), 
       'F':'foo' }) 
    print(df2) 
    
    '''
    输出:
         A          B    C  D      E    F 
    0  1.0 2013-01-02  1.0  3   test  foo 
    1  1.0 2013-01-02  1.0  3  train  foo 
    2  1.0 2013-01-02  1.0  3   test  foo 
    3  1.0 2013-01-02  1.0  3  train  foo  
    '''

    二、简单运用

    1.  导入模块

    import pandas as pd
    import numpy as np

    2.  读取excel文件

    df = pd.read_csv(path='file.csv')
    
    '''
    参数:header=None 用默认行名,0,1,2,3...
    names=['A', 'B', 'C'...] 自定义列名
    index_col='A'|['A', 'B'...] 给索引列指定名称,如果是多重索引,可以传list
    skiprows=[0,1,2] 需要跳过的行号,从文件头0开始,skip_footer从文件尾开始
    nrows=N 需要读取的行数,前N行
    chunksize=M 返回迭代类型TextFileReader,每M条迭代一次,数据占用较大内存时使用
    sep=':'数据分隔默认是',',根据文件选择合适的分隔符,如果不指定参数,会自动解析
    skip_blank_lines=False 默认为True,跳过空行,如果选择不跳过,会填充NaN
    converters={'col1', func} 对选定列使用函数func转换,通常表示编号的列会使用(避免转换成int)
    dfjs = pd.read_json('file.json') 可以传入json格式字符串
    dfex = pd.read_excel('file.xls', sheetname=[0,1..]) 读取多个sheet页,返回多个df的字典
    '''
    #df.to_csv()

    3.     查询数据

    df.shape                        #显示数据的多少行和多少列
    df.dtypes                       #显示数据的格式
    df.columns                      #显示数据的所有列名
    df.head(n)                      #显示数据的前n=5行
    df.tail(n)                      #显示数据的后n=5行
    df.head(1)[‘date’]            #获取第一行的date列
    df.head(1)[‘date’][0]         #获取第一行的date列的元素值
    df.describe(include='all')      # all代表需要将所有列都列出
    df.columns.tolist()             #把列名转换为list
    df.T                            #对数据的转置:
    df.notnull()                    #df的非空值为True
    df.isnull()                     #isnull是Python中检验空值的函数,返回的结果是逻辑值,包含空值返回True,不包含则返回False。可以对整个数据表进行检查,也可以单独对某一列进行空值检查。  
    df[“列名”]                    #返回这一列(“列名”)的数据
    df[[“name”,”age”]]      #返回列名为name和 age的两列数据
    df[‘列字段名’].unique()   #显示数据某列的所有唯一值, 有0值是因为对数据缺失值进行了填充
    df = pd.read_excel(file,skiprows=[2] )      #不读取哪里数据,可用skiprows=[i],跳过文件的第i行不读取
    df.loc[0]              #使用loc[]方法来选择第一行的数据
    df.loc[0][“name”]     #使用loc[]方法来选择第一行且列名为name的数据
    df.loc[2:4]             #返回第3行到第4行的数据
    df.loc[[2,5,10]]        #返回行标号为2,5,10三行数据,注意必须是由列表包含起来的数据。
    df.loc[:,’test1’]     #获取test1的那一列,这个冒号的意思是所有行,逗号表示行与列的区分
    df.loc[:,[‘test1’,’test2’]]     #获取test1列和test2列的数据
    df.loc[1,[‘test1’,’test2’]]     #获取第二行的test1和test2列的数据
    df.at[1,’test1’]      #表示取第二行,test1列的数据,和上面的方法类似
    df.iloc[0]              #获取第一行
    df.iloc[0:2,0:2]        #获取前两行前两列的数据
    df.iloc[[1,2,4],[0,2]] #获取第1,2,4行中的0,2列的数据
    df 
  • 相关阅读:
    spring mvc 总结
    linux安装tomcat及优化
    mysql支持emoji表情
    面试问题
    linux安装jdk mysql
    webstorm 介绍
    spring 总结
    UML工具
    js bom dom
    awt多线程聊天
  • 原文地址:https://www.cnblogs.com/windyrainy/p/10595042.html
Copyright © 2011-2022 走看看