zoukankan      html  css  js  c++  java
  • Pandas---6.数据清洗

    一、移除重复数据

    1.Series/DataFrame.duplicated

    Series/DataFrame.duplicated(*args, **kwargs)

    返回一个布尔Series,指示调用者中,哪些行是重复的(重复行标记为True)。

    参数:

    1. keep:一个字符串或者False,指示如何标记。它代替了废弃的参数take_last

      1. 'first':对于重复数据,第一次出现时标记为False,后面出现时标记为True
      2. 'last':对于重复数据,最后一次出现时标记为False,前面出现时标记为True
      3. False:对于重复数据,所有出现的地方都标记为True

    2.Series/DataFrame.drop_duplicates

    Series/DataFrame.drop_duplicates(*args, **kwargs)

    返回重复行被移除之后的Series/DataFrame

    参数:

    1. keep:一个字符串或者False,指示如何删除。 它代替了废弃的参数take_last

      1. 'first':对于重复数据,保留第一次出现,后面出现时删除
      2. 'last':对于重复数据,最后一次出现时保留,前面出现时删除
      3. False:对于重复数据,删除所有出现的位置
    2. inplace:一个布尔值。如果为True,则原地修改。否则返回新建的对象。

    对于DataFrame,还有个 subset参数。它是column label或者其列表,给出了考虑哪些列的重复值。默认考虑所有列。(即一行中哪些字段需要被考虑)

    二、apply

    1.DataFrame.apply

    有时,你希望将函数应用到由各列或者各行形成的一维数组上,此时DataFrame.apply()方法即可实现此功能。

     DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)
    

    参数:

    1. func:一个可调用对象,它会应用于每一行或者每一列
    2. axis:指定应用于行还是列。如果为0/'index',则沿着0轴计算(应用于每一列);如果为1/'columns',则沿着1轴计算(应用于每一行)。
    3. broadcast:一个布尔值,如果为True,则结果为DataFrame(不足的部分通过广播来填充)
    4. raw:一个布尔值。如果为False,则转换每一行/每一列为一个Series,然后传给 func 作为参数。如果True,则func接受到的是ndarray,而不是Series
    5. reduce:一个布尔值。用于判断当DataFrame为空时,应该返回一个Series还是返回一个DataFrame。如果为True,则结果为Series;如果为False,则结果为DataFrame
    6. args:传递给func的额外的位置参数(第一个位置参数始终为Series/ndarray

    2.DataFrame.applymap

    3.Series.apply

    Series.apply()方法应用到Series的每个元素上

     Series.apply(func, convert_dtype=True, args=(), **kwds)
    

    参数:

    1. func:一个可调用对象,它会应用于每个元素
    2. convert_dtype:一个布尔值。如果为True,则pandas会自动匹配func结果的最佳dtype;如果为False,则dtype=object
    3. args:传递给func的额外的位置参数。
    4. kwds:传递给func的额外的关键字参数。

    返回结果可能是Series,也可能是DataFrame(比如,func返回一个Series

    4.Series.apply

    Series.map(arg,na_action=None)方法会应用到Series的每个元素上

    Series.map(arg,na_action=None)
    

    参数:

    • arg:一个函数、字典或者Series。如果为字典或者Series,则它是一种映射关系,键/index label就是自变量,值就是返回值。
    • na_action:如果为ignore,则忽略NaN

    三、缺失数据

    pands对象上的所有描述统计都排除了缺失数据。 

    1.DataFrame.dropna

    根据各label的值中是否存在缺失数据来对轴label进行过滤。

    DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

    参数:

    1. axis:指定沿着哪个轴进行过滤。如果为0/'index',则沿着0轴;如果为1/'columns',则沿着1轴。你也可以同时提供两个轴(以列表或者元组的形式)
    2. how:指定过滤方式。如果为'any',则如果该label对应的数据中只要有任何NaN,则抛弃该label;如果为'all',则如果该label对应的数据中必须全部为NaN才抛弃该label
    3. thresh:一个整数,要求该label必须有thresh个非NaN才保留下来。它比how的优先级较高。
    4. subset:一个labelarray-like。比如axis=0,则subset为轴 1 上的标签,它指定你考虑哪些列的子集上的NaN
    5. inplace:一个布尔值。如果为True,则原地修改。否则返回一个新创建的DataFrame

    对于Series,其签名为: Series.dropna(axis=0, inplace=False, **kwargs)

    2.DataFrame/Series.fillna

    用指定值或者插值方法来填充缺失数据。

    DataFrame/Series.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
    

    参数:

    1. value:一个标量、字典、Series或者DataFrame。注意:valuemethod只能指定其中之一,不能同时提供。

      1. 如果为标量,则它指定了填充NaN的数据。
      2. 如果为Series/dict,则它指定了填充每个index的数据
      3. 如果为DataFrame,则它指定了填充每个DataFrame单元的数据
    2. method:指定填充方式。可以为None,也可以为:

      1. 'backfill'/'bfill':使用下一个可用的有效值来填充(后向填充)
      2. 'ffill'/'pad':使用前一个可用的有效值来填充(前向填充)
    3. axis:指定沿着哪个轴进行填充。如果为0/'index',则沿着0轴;如果为1/'columns',则沿着1轴

    4. inplace:一个布尔值。如果为True,则原地修改。否则返回一个新创建的DataFrame

    5. limit:一个整数。如果method提供了,则当有连续的NNaN时,只有其中的limitNaN会被填充(注意:对于前向填充和后向填充,剩余的空缺的位置不同)

    6. downcast:一个字典,用于类型转换。字典形式为: {label->dtype}dtype可以为字符串,也可以为np.float64等。

    3.DataFrame/Series.isnull/notnull

    DataFrame/Series.isnull():返回一个同样尺寸的布尔类型的对象,来指示每个值是否是null

    DataFrame/Series.notnull():返回一个同样尺寸的布尔类型的对象,来指示每个值是否是not null

    4.DataFrame/Series.replace

    fillna()方法可以看作是值替换的一种特殊情况。更通用的是值替换replace()方法。

    Series/DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, 
      regex=False, method='pad', axis=None) 
    

    参数:

    1. to_replace:一个字符串、正则表达式、列表、字典、Series、数值、None。指示了需要被替换的那些值

      1. 字符串:则只有严格等于该字符串的那些值才被替换

      2. 正则表达式:只有匹配该正则表达式的那些值才被替换(regex=True

      3. 列表:

        1. 如果to_placevalue都是列表,则它们必须长度严格相等
        2. 如果regex=True,则列表中所有字符串都是正则表达式。
      4. 字典:字典的键对应了被替换的值,字典的值给出了替换值。如果是嵌套字典,则最外层的键给出了column

      5. None:此时regex必须是个字符串,该字符串可以表示正则表达式、列表、字典、ndarray等。如果value也是None,则to_replace必须是个嵌套字典。

    2. value:一个字符串、正则表达式、列表、字典、Series、数值、None。给出了替换值。如果是个字典,则键指出了将填充哪些列(不在其中的那些列将不被填充)

    3. inplace:一个布尔值。如果为True,则原地修改。否则创建新对象。

    4. limit:一个整数,指定了连续填充的最大跨度。

    5. regex:一个布尔值,或者与to_replace类型相同。

      1. 如果为True,则to_replace必须是个字符串。
      2. 如果是个字符串,则to_replace必须为None,因为它会被视作过滤器
    6. method:指定填充类型。可以为'pad'/'ffill'/'bfill'。当to_replace是个列表时该参数有效。

    5.DataFrame/Series.interpolate

    interpolate是通过前后数据插值来填充NaN

    Series/DataFrame.interpolate(method='linear', axis=0, limit=None, inplace=False,
      limit_direction='forward', downcast=None, **kwargs)

    参数:

    1. method:一个字符串,指定插值的方法。

      1. 'linear':线性插值。只有它支持MultiIndex
      2. 'index'/'values':使用索引标签的整数下标来辅助插值
      3. 'nearest', 'zero', 'slinear', 'quadratic', 'cubic',

      'barycentric', 'polynomial'使用scipy.interpolate.interp1d。对于'polynomial'/'spline' ,你需要传入一个order(一个整数)

      1. 'krogh', 'piecewise_polynomial', 'spline', 'pchip','akima'也使用了scipy的插值算法。它们使用索引标签的整数下标来辅助插值。
      2. 'time': interpolation works on daily and higher resolution data to interpolate given length of interval
    2. axis:指定插值的轴。如果为0/'index'则沿着0 轴;如果为1/'columns'则沿着 1 轴

    3. limit:一个整数,指定插值时,如果有K个连续的NaN,则只插值其中的limit

    4. limit_direction:一个字符串。当设定了limit时,指定处理前面limitNaN,还是后面limitNaN。可以为'forward'/'backward'/'both'

    5. inplace:一个布尔值。如果为True,则原地修改。否则创建新对象。

    6. downcast:指定是否自动向下执行类型转换、

    7. 其他参数是传递给scipy的插值函数的。

    四、离散化

    1.pandas.cut

    连续数据常常会被离散化或者拆分成面元bin。可以通过pandas.cut()函数来实现:

    pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3,
      include_lowest=False)

    参数:

    1. x:一维的数据。

    2. bins:一个整数或者一个序列。

      1. 整数:它指定了划分区间的数量。每个区间是等长的,且最左侧的区间的左侧比x最小值小0.1%;最右侧的区间的右侧比x最大值大0.1%
      2. 一个序列:它给出了bins的每个划分点。
    3. right:一个布尔值。如果为True,则区间是左开右闭;否则区间是左闭右开的区间。

    4. labels:一个array或者None。如果为一个array,则它指定了结果binslabel(要求长度与bins数量相同)。如果为None,则使用区间来表示。

    5. retbins:一个布尔值。如果为True,则返回bins

    6. precision:一个整数,给出存储和显示bin label的精度

    7. include_lowest:一个布尔值。如果为True,则最左侧bin的左侧是闭区间

    返回的是一个Categorical对象或者Series对象。该函数类似于numpy.histogram()函数。

    2.pandas.qcut

    pandas.qcut(x, q, labels=None, retbins=False, precision=3)
    

    参数:

    1. q:一个整数或者序列。

      1. 整数:它指定了划分区间的数量。
      2. 一个序列:它给出了百分比划分点。比如[0,0.25,0.5,0.75,0.1]0.25代表25%划分点。如果数据不在任何区间内,则标记为NaN
    2. 其他参数与cut相同。(qcut没有bins参数)

     

  • 相关阅读:
    Devpexpress 打印预览问题
    常用DOS命令
    C# datetimePicker控件格式设置
    DevExpress中GridControl的属性设置
    C++ 学习1
    layui 时间控件选择一闪就消失,打不开问题解决办法
    echarts报错,Uncaught Error: series.type should be specified?
    vue项目中,在mian.js文件中引入scss文件后,报错
    记一次在vue中使用scss报错
    使用hexo搭建个人博客时引入图片失败
  • 原文地址:https://www.cnblogs.com/nxf-rabbit75/p/12108455.html
Copyright © 2011-2022 走看看