zoukankan      html  css  js  c++  java
  • pandas的使用方法

    一、基本使用方法

    # pandas引入约定
    import pandas as pd
    from pandas import Series,DataFrame
    import numpy as np
    import matplotlib.pyplot as plt
    
    # pandas数据结构
    # pandas数据结构介绍
    # Series:一种类似于一维数组的对象,它是由一组数据(各种numpy数据类型)
    # 以及一组与之相关的数据标签(即索引)组成,仅由一组数据即可产生简单的series
    # DataFrame:一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型
    # (数值,字符串,布尔值等),dataframe即有行索引也有列索引,可以被看做是由series组成的字典
    
    arr=np.arange(20)
    # 建立一个一维的数组对象
    series=Series(arr)
    print(series)
    
    # 查看索引
    print(series.index)
    # RangeIndex(start=0, stop=20, step=1)
    # 数据index绑定
    series01=Series([98,56,88,45],index=['语文','数学','英文','体育'])
    print(series01)
    print(series01.index)
    print(series01.values)
    
    # numpy中的数组运算,在series中都保留使用,并且series进行数组运算时,索引与值之间的映射关系不会改变
    
    # series缺失值检测
    # pandas中的isnull和notnull函数可用于series缺失值检测
    # isnull和notnull都返回一个布尔类型的series
    series2=Series([1,2,3,4,np.nan,5,6,7,8,9])
    print(series2)
    # 检测是否为空
    print(series2.isnull())
    # 检测是否不为空
    print(series2.notnull())
    
    # series自动对齐
    # 不同series之间进行算术运算,会自动对齐不同索引的数据
    # index之间会自动对应
    num=Series([23,45,67,89],index=['p3','p1','p2','p5'])
    print(num)
    price=Series([9.98,2.34,4.56,5.67,8.78],index=['p1','p2','p3','p4','p5'])
    print(num*price)
    
    # series及其索引的name属性
    # series对象本身及其索引都有一个name属性,可赋值设置,就是取别名
    num.name='PrductName'
    num.index.name='PrductType'
    print(num)
    
    # pandas的数据导出与导入
    print(pd.read_csv('ex1.csv'))
    print(pd.read_table('ex1.csv',sep=','))
    
    # 设置header=none,列名称就以数字为列名称
    print(pd.read_csv('ex2.csv',header=None))
    print(pd.read_csv('ex2.csv',header=None,names=('a1','a2','a3','a4','a5')))
    # 指定行索引
    print(pd.read_csv('ex2.csv',header=None,names=('a1','a2','a3','a4','a5'),index_col='a5'))
    # 指定多个行索引
    print(pd.read_csv('ex2.csv',header=None,names=('a1','a2','a3','a4','a5'),index_col=['a5','a1']))
    
    print(pd.read_csv('ex3.csv'))
    # 加了sep会把第一列作为行索引
    print(pd.read_table('ex3.csv',sep='s+'))
    
    # 缺失值的处理
    print(pd.read_csv('ex5.csv'))
    # 指定设置缺失值
    print(pd.read_csv('ex5.csv',na_values={'message':['world','foo'],'d':['4']}))
    
    # 读取大量数据的处理
    # 先读取10行数据
    print(pd.read_csv('ex6.csv',nrows=10))
    # 利用迭代功能来读取大量数据
    tr=pd.read_csv('ex6.csv',chunksize=1000)
    # tr是一个迭代器
    print(tr)
    result=pd.Series([])
    for chunk in tr:
        # 先统计每个相同key的个数,
        result=result.add(chunk['key'].value_counts(),fill_value=0)
    print(result)
    result=result.sort_values(ascending=False)
    print(result[:10])
    
    # 写入数据
    df=pd.read_csv('ex5.csv')
    # 会把读出来自己增加的行索引也写入文件
    # df.to_csv('ex5_out.csv')
    # 导致再次读出来的时候,会多了一列无用索引
    # print(pd.read_csv('ex5_out.csv'))
    # 可以指定写入不把索引号写入
    # df.to_csv('ex5_out.csv',index=False)
    # print(pd.read_csv('ex5_out.csv'))
    # 指定其他参数的写入
    print(df.to_csv('ex5_out.csv',index=False,header=None,columns=['b','c','message']))
    print(pd.read_csv('ex5_out.csv'))
    
    # 索引对象
    # 不管是series对象还是dataframe对象,都有索引对象
    # 索引对象负责管理标签和其他元数据(比如轴名称等)
    # 通过索引可以从series,dataframe中取值或对某个位置的值重新赋值
    # series或者dataframe自动化对齐功能就是通过索引进行的
    
    # 通过索引从dataframe中取值
    # 可以直接通过列索引获取指定列的数据
    # 要通过行索引获取指定行数据需要ix方法
    
    # dataframe
    # 通过二维数组创建dataframe
    # 通过字典的方式创建dataframe
    # 索引对象
    
    # 2行索引,3列索引
    df01=DataFrame([['tom','maerry','john'],[76,98,100]])
    print(df01)
    # 3行索引,2列索引
    df02=DataFrame([['tom',76],['merry',98],['john','100']])
    print(df02)
    
    df=DataFrame([[1,2,3],[2,3,4]],index=['a','b'])
    print(df)
    # 按照列取值
    print(df[0])
    print(df[0]['a'])
    # 按照行取值
    print(df[:1])
    print(df[:1][2])
    
    data={'apart':['1001','1002','1003','1001'],
          'profits':[567.87,987.87,873,498.87],
          'year':[2001,2001,2001,2000]}
    df=DataFrame(data)
    print(df)
    #   apart  profits  yearx
    # 0  1001   567.87  2001
    # 1  1002   987.87  2001
    # 2  1003   873.00  2001
    # 3  1001   498.87  2000
    print(df.index)
    # RangeIndex(start=0, stop=4, step=1)
    print(df.columns)
    # Index(['apart', 'profits', 'year'], dtype='object')
    print(df.values)
    # [['1001' 567.87 2001]
    #  ['1002' 987.87 2001]
    #  ['1003' 873.0 2001]
    #  ['1001' 498.87 2000]]
    
    # pandas基本功能
    # 重新索引
    # 丢弃指定轴上的项
    # 索引,选取和过滤
    # 算术运算和数据对齐
    # 函数应用和映射
    # 排序和排名
    # 带有重复值的轴索引
    df=DataFrame([[50,20,10],
                  [50,30,20],
                  [20,40,30],],
                 index=['c','j','p'],
                 columns=['c++','java','python'])
    print(df)
    #    c++  java  python
    # c   50    20      10
    # j   50    30      20
    # p   20    40      30
    df.index=[1,2,3]
    print(df)
    df.columns=['c++编译型语言','Java解释型语言','python解释型语言']
    print(df)
    
    n1=np.random.random((20,6))
    print(n1)
    s2=DataFrame(n1)
    print(s2)
    # 默认前五行
    print(s2.head())
    # 默认后五行
    print(s2.tail())
    # 行的快速统计汇总,得到数据的规模,大致范围
    print(s2.describe())
    # 行与列的转置
    print(s2.T)
    print(s2.T.describe())
    # 按轴排序,axis=1代表列轴 0为行轴,ascending=False降排序,默认为True升序
    print(s2.sort_index(axis=1,ascending=False))
    # 按值排序
    print(s2)
    # 依据第2列的数据进行升序排列by=[]可以添加多列名称
    print(s2.sort_values(by=[2]))
    # 依据第0行的升序排序
    print(s2.sort_values(by=[0],axis=1))
    
    # 通过传递数值进行位置选择(选择的是行)
    print(s2.iloc[0])#[0]代表索引第0行
    # 通过数值进行切片
    # 取第0行到5行
    print(s2.iloc[0:5,])
    # 取第0索引行到4索引行中的第2索引行到第3索引行,顾头不顾尾
    print(s2.iloc[0:5,][2:4])
    # 取第0索引行到4索引行中的第2索引列到第3索引列
    print(s2.iloc[0:5,2:4])
    
    print(s2.iloc[2,2])
    print(s2.iat[2,2])
    
    # 布尔索引
    # 整体过滤,获取所有大于0.5的值,小于的用NAN表示
    print(s2[s2>0.5])
    print(s2[1])
    # 大于5的为True,小于5的为False
    print(s2[1]>0.5)
    
    # isin()过滤数据
    s2.iloc[0,0]=1.2
    print(s2)
    print(s2[s2[0].isin([1.2])])
    
    # 缺失值的处理
    # reindex()方法可以对指定轴上的索引进行修改(增加/删除)
    s3=s2.reindex(index=[i for i in range(11)]
                  ,columns=list(s2.columns)+[0])
    print(s3)
    s3.iloc[1,1]=np.nan
    print(s3)
    # 删除缺失值的行
    # print(s3.dropna(how='any'))
    # 将缺失值设置为0
    print(s3.fillna(0))
    # 数据描述性统计
    print(s3.mean())
    
    # 制图
    # 直方图
    n1=np.random.randint(0,7,size=10)
    print(n1)
    s1=pd.Series(n1)
    # 数据元素统计
    print(s1.value_counts())
    
    n1=np.random.randint(0,10,size=100)
    df=Series(n1)
    print(df.value_counts())
  • 相关阅读:
    Mysql 索引原理《一》索引原理与慢查询2
    Mysql 索引原理《一》索引原理与慢查询1
    Mysql内置功能《六》流程控制
    Mysql内置功能《五》 函数
    Mysql内置功能《四》存储过程
    Mysql pymysql模块
    HDU2020 绝对值排序
    HDU2019 数列有序
    HDU2018 母牛的故事
    HDU2016 数据的交换输出
  • 原文地址:https://www.cnblogs.com/angelyan/p/10389283.html
Copyright © 2011-2022 走看看