• pandas 初识(三)


    Python Pandas 空值

    • pandas 判断指定列是否(全部)为NaN(空值)
    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({"a": ["aa", np.NAN, np.NAN], "b": [3, np.NAN, 2]})
      • 判断某列是否有NaN
    >>> df.a.isnull().any()
    True
      • 判断是否全部为 NAN
    >>> df.a.isnull().all()
    True
    • NAN值替换:
      • 不能使用,apply 去判断类型;DataFrame中np.nan 和 None 同为 isnull 
    >>> df.c.apply(None if x == np.nan else x)  # 错误的方式,x的类型不是np.nan活着np.NAN, 任何类型都有可能。所以这种判断时可用
    
    >>> df = df.where(df.notnull(), None)
    >>> print(df)
    >>> print(df.isnull())
          a     b     c
    0    aa        None
    1  None  None  None
    2  None  None  None
           a      b     c
    0  False  False  True
    1   True   True  True
    2   True   True  True

    Pandas 使用 cut 把一组数据分割成离散的区间,比如:一组年龄,一组成绩,把年龄或者成绩数据分割成不同的段上面,并打上标签

    • 定义:
    def cut(x, bins, right=True, labels=None, retbins=False, precision=3,
            include_lowest=False, duplicates='raise'):
    • 参数:
      • x: 被切分的数组数据(array-like),必须为1维,不能使用DataFrame
      • bins: 被切割后的区间,三种形式: int类型,数组或者 pandas.IntervalIndex
        • int: 将 x 均分成 bins 份
        • 数组(bins=[-1, 1, 2, 5,  np.inf]): 分成以下组: (-1, 1], (1, 2], (2, 5], (5, inf), 注意: (-1, 1] 不为str类型
      • right:boo 类型,默认为True,表示是否包含区间右部,比如: bins=[0, 1, 2], right=True, 则: (0, 1], (1, 2] 如果为False,则:(1,2),(2,3)
      • labels: 给分割后的区间打上相应的标签
      • retbins: bool 类型,表示是否将分割后的 bins 返回,当bins为一个int类型,可以获取划分后的区间,默认为False
      • precision: 分割区间,边境的小数位数,默认为3位
      • include_lowest: bool型的参数,表示区间的左边是开还是闭的,默认为false,也就是不包含区间左部(闭)
      • duplicates: 是否允许重复区间: raise, drop,默认: raise(不允许)
    • 例子:
    import pandas as pd
    ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年龄数据
    pd.cut(ages, [0,5,20,30,50,100], labels=False)
    pd.cut(ages, [0,5,20,30,50,100], labels=False)
    array([0, 0, 1, 3, 3, 1, 4, 4, 4, 4, 4, 1, 1, 2, 2, 3], dtype=int64)
      • 与 groupby 配合实现分组: df.groupby(pd.cut(df.ages, [0,5,20,30,50,100]))

    Pandas 使用 groupby 对数据分组进行迭代

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'], 'key2': ['one', 'two', 'one', 'two', 'one'],
                       'data1': np.random.randn(5), 'data2': np.random.randn(5)})
    
    print(df)
    print("*********")
    
    class_key = ["key1", "key2"]
    # class_key = ["key1"]  # 如果 class_key 是一个元素或者字符串,这class_ 为字符串
    for class_, group in df.groupby(class_key):
        print("______________")
        print(class_)
        print(group)

    结果:

      key1 key2     data1     data2
    0    a  one  1.237276 -0.813727
    1    a  two  0.508972 -1.336699
    2    b  one -0.343635  0.714680
    3    b  two  2.433797  0.417454
    4    a  one  1.215114  2.646685
    *********
    ______________
    ('a', 'one')
      key1 key2     data1     data2
    0    a  one  1.237276 -0.813727
    4    a  one  1.215114  2.646685
    ______________
    ('a', 'two')
      key1 key2     data1     data2
    1    a  two  0.508972 -1.336699
    ______________
    ('b', 'one')
      key1 key2     data1    data2
    2    b  one -0.343635  0.71468
    ______________
    ('b', 'two')
      key1 key2     data1     data2
    3    b  two  2.433797  0.417454

    Pandas 修改列名

    import pandas as pd
    import numpy as np
    
    a = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
    print(a)
    
    # a.colums = ["a", "b", "c"] # 错误的写法
    a.rename(columns={'A': 'a', 'C': 'c'}, inplace=True)
    print(a)

    结果:

       A  B  C
    0  1  4  7
    1  2  5  8
    2  3  6  9
       a  B  c
    0  1  4  7
    1  2  5  8
    2  3  6  9
  • 相关阅读:
    mongodb的热备工具pbm-agent
    注释
    mongodb的启动配置查询serverCmdLineOpts
    副本集状态
    分片集群的serverStatus监控
    副本集的replSetGetStatus监控
    京东
    副本集的replSetGetConfig监控
    mysql的replace函数
    副本集的serverStatus监控
  • 原文地址:https://www.cnblogs.com/spaceapp/p/10792491.html
Copyright © 2020-2023  润新知