zoukankan      html  css  js  c++  java
  • Pandas 数据分析基础

    Pandas

    安装

    • anaconda 安装:
      • conda list pandas 查看是否已经安装
      • conda install pandas
      • conda update pandas
    • pip 安装
      • pip install pandas
    • apt 安装
      • sudo apt-get install python-pandas

    测试是否安装成功

    nosetests pandases

    不成功会进行提醒,可以重新安装或者更新

    pandas数据结构

    • Series
    • DataFrame

    Series

    1 声明series 对象

    s = pd.Series([12,3,9,1])
    s
    
    s = pd.Series([12,52,4,2],index=['a','b','c','d'])
    s.values
    s.index
    

    2 用numpy数组或其他对象定义

    arr=np.array([1,2,3])
    s=pd.Series(arr)
    # 注意这里的s对象中的元素是对arr的引用,如果改变arr的值,s的值也会改变
    
    # 用作字典
    dic={'red':123,'blue',122,'green':129}
    s.Series(dic)
    

    3 筛选元素

    s[s>8] # 对values的比较
    s/2 
    np.log(s)
    

    4 其他函数

    s.unique() # 只出现一次
    s.value_counts() # 统计数量
    # 做筛选
    s.isin([0,3])
    s[s.isin([0,3])]
    # 空和不空
    s.isnull()
    s.notnull()
    

    DataFrame

    和excel类似

    创建Frame

    data={'title1':[1,2,3],'title2':[5,4,3]}
    frame=pd.DataFrame(data)
    frame=pd.DataFrame(data,columns=['title1'])
    
    # index 会自动生成索引也可以通过index属性进行更改
    pd.DataFrame(data,index=['one','two','three']) # 个数需要匹配
    

    选取元素

    frame.columns
    frame.index
    frame.values
    
    frame['title1'] or frame.title1
    # 行
    frame.ix[2]
    frame.ix[[0,1]]
    frame[0:2]
    frame['title1'][2]
    

    赋值

    frame.index.name='id'
    frame.columns.name='cols'
    frame['title1'][3]= 3
    ser=pd.Series(np.arange(5))
    frame['new']=ser
    

    其他

    # 所属关系
    frame.isin([1.0,'a'])
    # 删除一列
    del frame['new']
    # 筛选
    frame[frame <= 2]
    # 转置
    frame.T
    

    Index 对象

    ser.idxmin()
    ser.idxmax()
    ser.index.is_unique()
    
    # 执行更换索引
    ser.reindex(['a','b','c'])
    
    # 删除
    ser.drop('0')
    

    算数运算方法

    frame1.add(frame2)
    sub(), div(), mul()
    

    DataFrame 与 Series的运算

    frame=pd.DataFrame(np.arange(16).reshape(4,4),index=['red','blue','gren','yellow'],columns=['ball','pen','paper','socket'])
    
    ser=pd.Series(np.arange(4),index=['ball','pen','paper','socket'])
    
    frame - ser
    

    Pandas 库函数

    按行或列执行

    f=lambda x:x.max() - x.min()

    def f(x):

    ​ return x.max()-x.min()

    frame.apply(f,axis=1) # 处理行

    函数

    sum()
    mean()
    describe() # 计算多个统计量
    # 排序函数
    sort_index([ascending=False][axis=1])
    

    对数据结构中的元素排序

    # series
    ser.order()
    # DataFrame
    frame.sort_index(by='pen')
    frame.sort_index(by=['pen','pencil'])
    
    位次排序
    • ser.rank()
    • ser.rank(method='first')
    • ser.rank(ascending=False)
    相关性和协方差

    correlation and covariance 计算通常涉及到两个Series 对象

    >>> seq2=pd.Series([3,4,3,4,5,4,3,2],['06','07','08','09','10','11','12','13'])
    >>> seq1=pd.Series([1,2,3,4,4,3,2,1],['06','07','08','09','10','11','12','13'])
    >>> seq1.corr(seq1)
    1.0
    >>> seq1.corr(seq2)
    0.7745966692414835
    >>> seq1.cov(seq2)
    0.8571428571428571
    

    DataFrame 可以实现其对象的相关性和协方差,返回DataFrame矩阵

    >>> frame2=pd.DataFrame([[1,4,3,6],[4,5,6,1],[3,3,1,5],[4,1,6,4]],index=['r','g','b','w'],columns=['ball','pen','pencil','paper'])
    >>> frame2.corr()
                ball       pen    pencil     paper
    ball    1.000000 -0.276026  0.577350 -0.763763
    pen    -0.276026  1.000000 -0.079682 -0.361403
    pencil  0.577350 -0.079682  1.000000 -0.692935
    paper  -0.763763 -0.361403 -0.692935  1.000000
    >>> frame2.cov()
                ball       pen    pencil     paper
    ball    2.000000 -0.666667  2.000000 -2.333333
    pen    -0.666667  2.916667 -0.333333 -1.333333
    pencil  2.000000 -0.333333  6.000000 -3.666667
    paper  -2.333333 -1.333333 -3.666667  4.666667
    

    除此之外还可以计算DataFrame对象与Series或者DataFrame对象之间的关系

    frame.corrwith(ser)

    frame.corrwith(frame2)

    NaN

    过滤NaN

    # series obj
    ser.dropna()
    or
    ser[ser.notnull()]
    
    # DataFrame obj
    frame.dropna() # 整行都被删除
    frame.dropna(how='all') # 删除全部Nan的列
    

    为NaN填充

    frame.fillna(0)
    frame.filena('ball':1,'mug':2)
    

    等级索引&分级

    >>> mser=pd.Series(np.random.rand(6),[['a','a','b','b','c','c'],[2,3,6,4,5,8]])
    >>> mser
    a  2    0.936455
       3    0.431867
    b  6    0.996895
       4    0.584551
    c  5    0.883911
       8    0.049483
    dtype: float64
    # 选取
    mser['a'][2]=0.936455
    

    DataFrame 与 Series转化

    DataFrame -> Series : stack()

    frame.stack()
    

    Series -> DataFrame : unstack()

    mser.unstack()
    

    交换层级:

    frame.colums.names=['a','b']
    frame.index.name=['c','d']
    frame.swaplevel('c','d')
    frame.sortlevel('c')# 只按照一个层级进行排序
    
    # 按层级统计数据
    frame.sum(level='c')
    frame.sum(level='c',axis=1)
    

    Pandas 数据读写


    • read_csv()
    • read_excel()
    • read_sql()
    • read_json()
    • read_html()
    • read_clipboard()


    • to_csv()
    • to_excel()
    • to_sql()
    • to_json()
    • to_html()
    • to_clipboard()

    CSV 文件

    1. read_csv()
    2. read_table()
    3. to_csv()
    pd.csvframe=read_csv('data.csv')
    pd.read_table('data.csv',sep=',')
    # names 指定表头
    read_csv('data.csv',names=['id'])
    # header 添加表头
    

    TxT RegExp 解析

    在read_table中使用sep中的正则表达式

    . 单个字符
    d 数字
    D 非数字
    s 空白字符
    S 非空白字符
    换行符
    制表符
    >>> pd.read_table('tt.txt',sep='s*')
       white  red  blue  green
    0      1    5     2      3
    1      2    7     8      5
    2      3    3     6      7
    >>> pd.read_table('tt.txt',sep='D*',header=None)
     # skiprows=[1,3,6]排除1,3,6 行
     # skiprows=5 排除前五行
    

    部分数据读取(常用用法)

    从 skiprows 开始读,读多少 nrows行

    read_csv('data.csv',skiprows=[2],nrows=3,header=None)

    解析文本:

    out=pd.Series()
    i=0
    # chunksize 一次处理数据行数
    pieces = pd.read_csv('tips.csv',chunksize=3)
    for piece in pieces:
    	out.set_value(i,piece['size'].sum())
    	i=i+1
    

    往CSV中写数据

    frame.to_csv('tt.csv',index=False,header=False)
    

    替换,,中内容

    frame.to_csv('new.csv',na_rep='NaN')

    HTML

    读取HTML

    read_html()

    to_html()

    安装html5lib库

    conda install html5lib
    

    tf=pd.DataFrame(np.arange(4).reshape(2,2))

    print(tf.to_html()) # 自动转化html

    更加复杂的例子:(生成)

    frame=pd.DataFrame(np.random.random((4,4)),index=['white','black','red','blue'],columns=['up','down','right','left'])
    
    s=['<html>']
    s.append('<head><title>DataFrame</title></head>')
    s.append('<body>')
    s.append(frame.to_html())
    s.append('</body></html>')
    html=''.join(s)
    
    html_file=open('myFrame.html','w')
    html_file.write(html)
    html_file.close()
    

    打开HTML文件:

    >>> web_frame=pd.read_html('myFrame.html')
    >>> web_frame
    [  Unnamed: 0        up      down     right      left
    0      white  0.654247  0.917280  0.599515  0.401334
    1      black  0.647599  0.555069  0.612985  0.279210
    2        red  0.204044  0.719828  0.950169  0.749252
    3       blue  0.089194  0.498193  0.568361  0.427534]
    

    局限于读表格

    从XML读取数据

    lxml 库文件

    from lxml import objectify
    xml=objectify.parse('test.xml')
    root=xml.getroot()
    

    读写excel文件

    pd.read_excel('data.xlsx')
    pd.read_excel('data.xlsx','sheet2')
    
  • 相关阅读:
    浏览器能正常访问的url,superagent不能正常访问
    Reactor模式理解
    牛客网剑指offer 二维数组的查找
    在C语言结构体中添加成员函数
    html页面字体相关
    html页面背景设定相关
    快速排序
    html页面边框的另一种写法
    2018暑期北航软件能力培养师资培训有感
    web.xml文件介绍
  • 原文地址:https://www.cnblogs.com/pprp/p/9123991.html
Copyright © 2011-2022 走看看