数据挖掘之Python3下pandas的使用

作者: 简书用户9527 | 来源:发表于2018-04-07 22:58 被阅读282次

    (一)介绍

    Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

    (二)序列(Series)

    序列(Series)是Python中的列表、元组的高级版本。序列与上期介绍的一维数组类似,具有更好的广播效应,既可以与一个标量进行运算,又可以进行元素级函数的计算。

    • 一个简单的列表相加直接报错了


      image.png
    • 使用序列(Series)相加没有出现报错的情况

    image.png

    (三)序列的使用姿势

    这里序列的使用包括序列的索引,成员关系,排重,排序,计数,抽样,统计运算

    """
    序列的索引,成员关系,排重,排序,计数,抽样,统计运算
    """
    print('****** 序列的索引,成员关系,排重,排序,计数,抽样,统计运算 ******')
    import numpy as np
    np.random.seed(1)
    s1 = pd.Series(np.random.randint(size=5,low=1,high=10))
    print(s1,'\n')
    
    print('**** 取第一个元素 ****')
    print(s1[0],'\n')
    print('**** 取第2~3个元素 ****')
    print(s1[1:3],'\n')
    print('**** 依次取元素,步长为2 ****')
    print(s1[::2],'\n')
    
    print('倒数取元素(简洁并高速):')
    print(s1)
    print(s1.iat[-3],'\n')
    print(s1[-3:],'\n')
    
    print('布尔索引:')
    s2 = pd.Series(np.random.randint(size=5,low=1,high=100))
    print(s2)
    # 取出>=70的值
    print(s2[s2>=70])
    # 取出40到50之间的值
    print('------')
    print(s2[s2>=10][s2<=50])
    
    # 一个向量的元素是否包含于另一个向量  np.in1d
    arr1 = np.array([1,2,3,4])
    arr2 = np.array([10,20,3,40])
    print(np.in1d(arr1,arr2),'\n')
    
    s1 = pd.Series(['A','B','C','D'])
    s2 = pd.Series(['X','A','Y','D'])
    print('s1 是否包含于 s2中')
    print(s1.isin(s2),'\n')
    print(np.in1d(s1,s2),'\n')
    
    # 序列去重及水平统计
    s = np.random.randint(size=1000,low=1,high=4)
    print('序列去重及水平统计','\n',s)
    # 排重
    print(pd.unique(s),'\n')
    # 水平统计
    print(pd.value_counts(s))
    
    # 序列的排序
    s = pd.Series(np.random.normal(size=4))
    # 序列索引排序
    print(s.sort_index(ascending=False),'\n')# 降序排序
    # 序列的值排序
    print(s.sort_values()) # 按序列的实际值升序排序
    
    图片一.png
    图片二.png
    图片三.png
    图片四

    (四)抽样

    # 抽样
    print('***********  抽样 ********** ')
    """
    s.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
    n:指定抽取的样本量;
    frac:指定抽取的样本比例;
    replace:是否有放回抽样,默认无放回;
    weights:指定样本抽中的概率,默认等概论抽样;
    random_state:指定抽样的随机种子
    """
    
    # 从1...100中随机抽取3个幸运儿
    r_1 = pd.Series(range(1, 101))
    print(r_1.sample(n=3, random_state=2), '\n')
    
    # 从1...5中有放回的抽取3个值
    r_2 = pd.Series(range(1,6))
    print(r_2.sample(n=3,replace=True,random_state=2),'\n')
    
    # 从男、女性别中不等概率抽10个样本
    r_3 = pd.Series(['男','女'])
    s_3 = r_3.sample(n=10,replace=True,weights=[0.2,0.8],random_state=3)
    print(s_3,'\n')
    
    
    抽样

    (五)统计运算

    这里的统计函数与上一篇Numpy的统计函数相差不多,故没有进行多的实践,

    print('********  统计运算  *********')
    np.random.seed(123)
    s = pd.Series(np.random.randint(size=100,low=10,high=30))
    print('原始值:',s,'\n')
    s_des = s.describe()
    print(s_des,'\n')
    
    # 判断一个元素是否为缺失元素  isnull
    
    s = pd.Series([1,2,np.nan,4,np.nan,6])
    print(s,'\n')
    print(s.isnull)
    
    
    统计运算
    统计运算二

    <声明:统计运算的用例大了些,只能截取部分的结果>

    (六)其他统计函数

    s.min()  # 最小值
    s.quantile(q=[0,0.25,0.5,0.75,1]) # 分位数函数
    s.median()  # 中位数
    s.mode()  # 众数
    s.mean()  # 平均值
    s.mad()  # 平均绝对误差
    s.max  # 最大值
    s.sum()  # 和
    s.std()  # 标准差
    s.var()  # 方差
    s.skew()  # 偏度
    s.kurtosis()  # 峰度
    s.cumsum()  # 和的累计,返回序列
    s.cumprod()  # 乘积的累积,返回序列
    s.product()  # 序列元素乘积
    s.diff()  # 序列差异(微分),返回序列
    s.abs()  # 绝对值,返回序列
    s.pct_change()  # 百分比变化 ,返回序列
    s.corr(s2)  # 相关系数
    s.ptp()  # 极差  R中的range函数
    
    

    附上全部代码:

    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/4 14:45
    # @Author  : 蛇崽
    # @Email   : 643435675@QQ.com
    # @File    : pandas_learning.py(pandas库的学习:向量,数据框的处理)
    import pandas as pd
    
    m_list = [1,3,5]
    
    # 将列表转换为序列
    pd_series = pd.Series(m_list)
    pd_result = pd_series+10
    print(pd_result)
    
    ls1 = [1,3,5]
    series1 = pd.Series(ls1)
    # x^2
    temp = pow(series1,2)
    print(temp)
    
    """
    序列的索引,成员关系,排重,排序,计数,抽样,统计运算
    """
    print('****** 序列的索引,成员关系,排重,排序,计数,抽样,统计运算 ******')
    import numpy as np
    np.random.seed(1)
    s1 = pd.Series(np.random.randint(size=5,low=1,high=10))
    print(s1,'\n')
    
    print('**** 取第一个元素 ****')
    print(s1[0],'\n')
    print('**** 取第2~3个元素 ****')
    print(s1[1:3],'\n')
    print('**** 依次取元素,步长为2 ****')
    print(s1[::2],'\n')
    
    print('倒数取元素(简洁并高速):')
    print(s1)
    print(s1.iat[-3],'\n')
    print(s1[-3:],'\n')
    
    print('布尔索引:')
    s2 = pd.Series(np.random.randint(size=5,low=1,high=100))
    print(s2)
    # 取出>=70的值
    print(s2[s2>=70])
    # 取出40到50之间的值
    print('------')
    print(s2[s2>=10][s2<=50])
    
    # 一个向量的元素是否包含于另一个向量  np.in1d
    arr1 = np.array([1,2,3,4])
    arr2 = np.array([10,20,3,40])
    print(np.in1d(arr1,arr2),'\n')
    
    s1 = pd.Series(['A','B','C','D'])
    s2 = pd.Series(['X','A','Y','D'])
    print('s1 是否包含于 s2中')
    print(s1.isin(s2),'\n')
    print(np.in1d(s1,s2),'\n')
    
    # 序列去重及水平统计
    s = np.random.randint(size=1000,low=1,high=4)
    print('序列去重及水平统计','\n',s)
    # 排重
    print(pd.unique(s),'\n')
    # 水平统计
    print(pd.value_counts(s))
    
    # 序列的排序
    s = pd.Series(np.random.normal(size=4))
    # 序列索引排序
    print(s.sort_index(ascending=False),'\n')# 降序排序
    # 序列的值排序
    print(s.sort_values()) # 按序列的实际值升序排序
    
    
    # 抽样
    print('***********  抽样 ********** ')
    """
    s.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
    n:指定抽取的样本量;
    frac:指定抽取的样本比例;
    replace:是否有放回抽样,默认无放回;
    weights:指定样本抽中的概率,默认等概论抽样;
    random_state:指定抽样的随机种子
    """
    
    # 从1...100中随机抽取3个幸运儿
    r_1 = pd.Series(range(1, 101))
    print(r_1.sample(n=3, random_state=2), '\n')
    
    # 从1...5中有放回的抽取3个值
    r_2 = pd.Series(range(1,6))
    print(r_2.sample(n=3,replace=True,random_state=2),'\n')
    
    # 从男、女性别中不等概率抽10个样本
    r_3 = pd.Series(['男','女'])
    s_3 = r_3.sample(n=10,replace=True,weights=[0.2,0.8],random_state=3)
    print(s_3,'\n')
    
    print('********  统计运算  *********')
    np.random.seed(123)
    s = pd.Series(np.random.randint(size=100,low=10,high=30))
    print('原始值:',s,'\n')
    s_des = s.describe()
    print(s_des,'\n')
    
    # 判断一个元素是否为缺失元素  isnull
    
    s = pd.Series([1,2,np.nan,4,np.nan,6])
    print(s,'\n')
    print(s.isnull)
    
    print('**********  pandas 其他统计函数 ************')
    
    others =\
    """
    s.min()  # 最小值
    s.quantile(q=[0,0.25,0.5,0.75,1]) # 分位数函数
    s.median()  # 中位数
    s.mode()  # 众数
    s.mean()  # 平均值
    s.mad()  # 平均绝对误差
    s.max  # 最大值
    s.sum()  # 和
    s.std()  # 标准差
    s.var()  # 方差
    s.skew()  # 偏度
    s.kurtosis()  # 峰度
    s.cumsum()  # 和的累计,返回序列
    s.cumprod()  # 乘积的累积,返回序列
    s.product()  # 序列元素乘积
    s.diff()  # 序列差异(微分),返回序列
    s.abs()  # 绝对值,返回序列
    s.pct_change()  # 百分比变化 ,返回序列
    s.corr(s2)  # 相关系数
    s.ptp()  # 极差  R中的range函数
    """
    print(others)
    
    p1 = np.random.randint(low=10,high=999,size=200)
    min1 = p1.min()
    max1 = p1.max()
    print(min1)
    print(max1)
    cum1 = p1.cumsum()
    print(cum1)
    m1 = p1.mean()
    print(m1)
    print(p1.sum())
    
    

    以上更新截止:2018/04/07 22:46
    你还可以学习:
    数据挖掘之Numpy详细了解

    相关文章

      网友评论

        本文标题:数据挖掘之Python3下pandas的使用

        本文链接:https://www.haomeiwen.com/subject/xtyyhftx.html