美文网首页python进阶我爱编程
Python数据科学手册(五)【Pandas 数据操作】

Python数据科学手册(五)【Pandas 数据操作】

作者: nummycode | 来源:发表于2017-09-17 13:56 被阅读68次

    Numpy的一个优点就是提供了快速的元素级别操作,比如算术运算以及其他复杂操作。DataFrame继承 了大部分功能。
    Pandas在这些函数的基础上提供了更为高级的功能。比如,一元运算不修改行索引和列索引;而对于二元操作,Pandas会自动对齐行索引。

    索引不变的通用函数

    由于Pandas是基于Numpy搭建的,所以任何Numpy的通用函数都适用于Pandas
    Series对象和DataFrame对象。
    首先,我们创建一个Series对象和DataFrame对象。

    import pandas as pd
    import numpy as np
    rng = np.random.RandomState(42)
    ser = pd.Series(rng.randint(0, 10, 4))
    
    0    6
    1    3
    2    7
    3    4
    dtype: int64
    

    创建DataFrame

    df = pd.DataFrame(rng.randint(0, 10, (3, 4)),
                      columns=['A', 'B', 'C', 'D'])
    
    image.png

    如果将Numpy通用函数作用与Pandas对象上,得到的结果索引保持不变:

    np.exp(ser)
    

    结果为:

    0     403.428793
    1      20.085537
    2    1096.633158
    3      54.598150
    dtype: float64
    

    更复杂的例子:

    np.sin(df * np.pi / 4)
    
    image.png

    对齐索引的通用函数

    对于二元操作,Pandas会自动对齐索引之后然后进行运算。

    Series中的索引对齐

    首先,创建两个Series对象,然后进行合并操作:

    area = pd.Series({'Alaska': 1723337, 'Texas': 695662,
                      'California': 423967}, name='area')
    population = pd.Series({'California': 38332521, 'Texas': 26448193,
                            'New York': 19651127}, name='population')
    

    通过除法运算计算人 口密度:

    population / area
    

    结果为:

    Alaska              NaN
    California    90.413926
    New York            NaN
    Texas         38.018740
    dtype: float64
    

    结果索引是两者的并集:

    area.index | population.index
    # Index(['Alaska', 'California', 'New York', 'Texas'], dtype='object')
    

    如果某个DataFrame没有对应的键值,则赋值为NaN。对于其他的二元算术操作,结果都是类似的:

    A = pd.Series([2, 4, 6], index=[0, 1, 2])
    B = pd.Series([1, 3, 5], index=[1, 2, 3])
    A + B
    

    结果为:

    0    NaN
    1    5.0
    2    9.0
    3    NaN
    dtype: float64
    

    如果填充NaN不是自己想要的结果,还可以通过调用方法并指定填充值:

    A.add(B, fill_value=0)
    

    输出为:

    0    2.0
    1    5.0
    2    9.0
    3    5.0
    dtype: float64
    

    DataFrame中的索引对齐

    当操作DataFrame时,会通水对齐行和列。

    A = pd.DataFrame(rng.randint(0, 20, (2, 2)),
                     columns=list('AB'))
    B = pd.DataFrame(rng.randint(0, 10, (3, 3)),
                     columns=list('BAC'))
    

    A+B:

    A + B
    
    image.png

    还可以指定填充值:

    fill = A.stack().mean()
    A.add(B, fill_value=fill)
    

    结果为:

    image.png

    同时操作DataFrame和Series的通用函数。

    当同时操作DataFrame和Series对象时,行和列索引保持对齐。

    df = pd.DataFrame(A, columns=list('QRST'))
    df - df.iloc[0]
    

    结果为:

    image.png

    上述操作是行级别的,如果需要列级别的操作,需要指定aixs:

    df.subtract(df['R'], axis=0)
    
    image.png

    相关文章

      网友评论

        本文标题:Python数据科学手册(五)【Pandas 数据操作】

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