zoukankan      html  css  js  c++  java
  • python数据分析

    数据整理与预处理
    – 数据清洗
    – 合并数据集
    – 数据转换
    – 重塑和轴向旋转
    – 字符串操作

    ====================================================

    一、数据清洗

      缺失值处理

        删除记录

        数据插补

          拉格朗日插值法,牛顿插值法,均值,中位数,固定值,回归法等

        不处理

      异常值处理

    ****************************************************************************

    拉格朗日插值法

    # 环境设置

    # -*- coding: utf-8 -*-
    from __future__ import division
    import numpy as np
    import os
    import matplotlib.pyplot as plt
    from scipy.interpolate import lagrange #导入拉格朗日插值函数
    np.random.seed(12345)
    plt.rc('figure', figsize=(10, 6))
    from pandas import Series, DataFrame
    import pandas as pd
    np.set_printoptions(precision=4, threshold=500)
    pd.options.display.max_rows = 100

    ###缺失值处理——拉格朗日插值法
    inputfile = 'C:/python/socket/data/catering_sale.xls' #销量数据路径
    outputfile = 'C:/python/socket/data/sales.xls' #输出数据路径

    data = pd.read_excel(inputfile) #读入数据
    data[u'销量'][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None

    #自定义列向量插值函数
    #s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
    def ployinterp_column(s, n, k=5):
      y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数
      y = y[y.notnull()] #剔除空值
      return lagrange(y.index, list(y))(n) #插值并返回插值结果

    #逐个元素判断是否需要插值
    for i in data.columns:
      for j in range(len(data)):
        if (data[i].isnull())[j]: #如果为空即插值。
          data[i][j] = ployinterp_column(data[i], j)

    data.to_excel(outputfile) #输出结果,写入文件

    ************************************************************************

    二、合并数据集

    pandas对象

      merge方法:根据一个或者多个键将不同的dataframe中的行合并,同关系型数据库的join操作

      cancat方法:沿一条轴将多个对象堆叠起来,类似数据库的union操作

    数据库风格的dataframe合并

      merge

      merge参数:left、right、how、on

    索引上的合并

    轴向连接

    #1.inner join

    (1)键值一样
    df1 = DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],'data1': range(7)})
    df2 = DataFrame({'key': ['a', 'b', 'd'],'data2': range(3)})

    pd.merge(df1, df2)
    pd.merge(df1, df2, on='key')

    (2)指定键值
    df3 = DataFrame({'lkey': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],'data1': range(7)})
    df4 = DataFrame({'rkey': ['a', 'b', 'd'],'data2': range(3)})
    pd.merge(df3, df4, left_on='lkey', right_on='rkey')

    2.外链接

    (1)全外连接

    pd.merge(df1, df2, how='outer')

    (2)左连接

    pd.merge(df1, df2, on='key', how='left')

    ###索引上的合并
    #类似key
    left1 = DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'],'value': range(6)})
    right1 = DataFrame({'group_val': [3.5, 7]}, index=['a', 'b'])

    轴向连接

    arr = np.arange(12).reshape((3, 4))
    np.concatenate([arr, arr], axis=1)

    合并重叠数据

    重塑和轴向旋转

    数据转换

      移除重复数据

      利用函数或映射进行数据转换

      替换

      重命名轴索引

      

  • 相关阅读:
    一个奇怪的SystemClock_Config问题解决方法
    Keil5下载STM32库
    Entry point (0x08000000) points to a Thumb instruction but is not a valid Thumb code pointer.
    Error: failed to execute 'C:KeilARMARMCC'的解决办法
    C#委托的介绍(delegate、Action、Func、predicate)
    CopyFromScreen在屏幕缩放情况下需要做处理
    C# CEF 封装UserControl
    一个单js文件也可以运行vue
    vue自学入门-3(vue第一个例子)
    vue自学入门-1(Windows下搭建vue环境)
  • 原文地址:https://www.cnblogs.com/geek-ace/p/9021190.html
Copyright © 2011-2022 走看看