zoukankan      html  css  js  c++  java
  • 数据清洗和准备 Pandas

    数据清洗和准备《利用pandas进行数据分析-e2》

    在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载、清理、转换 以及重塑。这些工作会占到分析师时间的80%或更多。

    pandas和内置的Python标准库提供了一组高级的、灵活的、 快速的工具,可以让你轻松地将数据规整为想要的格式。

    • 在本章中,我会讨论处理缺失数据、重复数据、字符串操作和其它分析数据转换的 工具。
    • 下一章:数据规整:聚合、合并和重塑,我会关注于用多种方法合并、重塑数据集

     

    7.1处理缺失数据

    一些关于缺失数据处理的函数:

    • fillna(value=None,method=None)   使用指定方法来填充NA/NaN,即用某值把NA替换掉。
    • dropna(axis=0, inplace=False, how='any')     返回一个新对象数据,不包括缺失值。
      • 默认是行方向
      • 返回新对象
      • how参数默认: 只要行含有任意数量的缺失值,就会整行去掉。
        • 可以改成"all", 必须是整行/列的所有的数据都是NaN,这行/列才会被去掉。
      • thresh参数,这个意思是脱谷/打谷,即让种子和谷物的枝条分离。
        • 假如how是默认值any, 设置thresh=1, 则只要行/列有一个非NaN值,那么就保留这行/列。
    • isnull和notnull, 返回一个bool对象。

    滤除缺失数据:dropna

    data = pd.Series([1, np.nan, 3.5, np.nan, 7])
    data.dropna()
    #返回的是去掉缺失值的对象。  
    0    1.0
    2    3.5
    4    7.0
    dtype: float64
    #还可以使用
    data[data.notnull()]

    填充缺失数据: fillna

    例子1:

    # 使用字典dict,为不同的列填充不同的值
    df.fillna({0: 0.5, 1: 0.75, 2: 1.0})

    例子2:

    使用method和limit参数:

    • limit: 连续填充的最大数量
    • method默认是None,
      • ffill即forward fill
      • bfill即backward fill
    df = pd.DataFrame(np.random.randn(6, 3))
    df.iloc[2:, 1] = NA
    df.iloc[4:, 2] = NA
    ...
            0        1        2
    0    0.556356    0.081234    0.146193
    1    1.278347    0.631483    3.188404
    2    -2.243820    NaN    -0.376037
    3    -1.616570    NaN    -0.739994
    4    0.017522    NaN    NaN
    5    0.019936    NaN    NaN
    ...
    df.fillna(method="ffill", limit= 2)
             0      1        2
    0    0.556356    0.081234    0.146193
    1    1.278347    0.631483    3.188404
    2    -2.243820    0.631483    -0.376037
    3    -1.616570    0.631483    -0.739994
    4    0.017522    NaN    -0.739994
    5    0.019936    NaN    -0.739994

    例子3:可以填充任意数据,比如填充均值:

    df.fillna(data.mean())

    7.2 数据转换

    过滤、清理以及其他的转换工作

    移除重复数据

    data.duplicated(), 如果是完全一样的行,则是重复行,最返回一个bool Series。

    data.drop_duplicates(), 去除完全一样的行的第一行, 返回一个新的对象。

    • 默认是整行比较,也可以指定一列或多列进行比较并去重复。

    利用函数或映射进行数据转换(原书案例)

    用map函数进行元素级别的替换。

    一个食物和其重量的2维表:

    data = pd.DataFrame({'food': ['bacon', 'pulled pork', 'bacon','Pastrami', 'corned beef', 'Bacon','pastrami', 'honey ham','nova lox'],
                          'ounces': [4, 3, 12, 6, 7.5, 8, 3, 5, 6]})

    增加一列animal,表示食物取自那种动物。

    首先:一个dict映射。key是食物,values是动物名字。

    meat_to_animal = {
    'bacon': 'pig',
    'pulled pork': 'pig',
    'pastrami': 'cow',
    'corned beef': 'cow',
    'honey ham': 'pig',
    'nova lox': 'salmon'
    }

    map方法接受一个函数/映射进行数据替换:

    1:使用字典映射:

    #把大些字母变为小些字母
    lowercased = data['food'].str.lower()
    # 使用map替换数据,并为data新增一列,并储存替换的值:
    data['animal'] = lowercased.map(meat_to_animal)

    2:或者使用函数lambda

    data['animals'] = data['food'].map(lambda x : meat_to_animal[x.lower])

     

    替换值

    fillna()是把NaN,替换为指定的值,一种特殊的替换。

    而data.replace(from, to), 可以把任意数量的值进行任意的替换。⚠️:

    • 可以使用dict,或list
    • 是元素级别的替换

     

    重命名轴索引(226)

    离散化和面元划分

    检测和过滤异常值

    排列和随机采样

    计算指标/哑变量


    7.3 字符串操作

    Python能够成为流行的数据处理语言,部分原因是其简单易用的字符串和文本处理功能:

    • 大部分文本运算都直接做成了字符串对象的内置方法
    • 复杂操作,则使用正则表达式。
    • 可以对整组数据应用字符串表达式和正则表达式,而且能处理烦人的缺失数据。

    字符串对象方法

    正则表达式

    pandas的矢量化字符串函数

  • 相关阅读:
    一线架构师实践指南读后感
    可修改性战术
    软件架构师如何工作?
    寒假学习第十五天
    寒假学习第十四天
    寒假学习第十三天
    寒假学习第十二天
    寒假学习第十一天
    寒假学习第十天
    如何变得聪明
  • 原文地址:https://www.cnblogs.com/chentianwei/p/12322459.html
Copyright © 2011-2022 走看看