zoukankan      html  css  js  c++  java
  • Pandas学习笔记

    Pandas主要有下面几种数据类型:

    • Series(一维数组)
    • DataFrame(二维数组)
    • Panel(三维数组)
    • Panel4D(四维数组)
    • PanelND(N维数组)

    Series

    pandas.Series(data=None, index=None)
    

    其中,data 可以是字典,或者NumPy 里的 ndarray 对象等。index 是数据索引,索引是 Pandas 数据结构中的一大特性,它主要的功能是帮助我们更快速地定位数据。

    %matplotlib inline
    import pandas as pd
    
    s = pd.Series({'a': 10, 'b': 20, 'c': 30})
    '''
    a    10
    b    20
    c    30
    dtype: int64
    '''
    

    type(s)可以查看数据的类型。

    pandas.core.series.Series
    # pandas.core.series.Series
    

    由于 Pandas 基于 NumPy 开发。那么 NumPy 的数据类型 ndarray 多维数组自然就可以转换为 Pandas 中的数据。而 Series 则可以基于 NumPy 中的一维数据转换。

    import numpy as np
    s = pd.Series(np.random.randn(5))
    '''
    0   -1.912776
    1   -1.462528
    2   -0.416607
    3   -1.522392
    4   -1.196030
    dtype: float64
    '''
    

    DataFrame

    DataFrame是Pandas中最常见的一种,由于常常数据是以二维形式存储在csv种,所以用Pandas读取csv中的二维数组是一项必不可少的技能,你可以把 DataFrame 看成是 Series 的扩展类型,它仿佛是由多个 Series 拼合而成。它和 Series 的直观区别在于,数据不但具有行索引,且具有列索引。

    DataFrame的构造方法有:

    • 一维数组、列表、字典或者 Series 字典。
    • 二维或者结构化的 numpy.ndarray
    • 一个 Series 或者另一个 DataFrame。
    df = pd.DataFrame({'one': pd.Series([1, 2, 3]),
                       'two': pd.Series([4, 5, 6])})
    '''
    	one	two
    0	1	4
    1	2	5
    2	3	6
    '''
    

    使用列表组成的字典和字典组成的列表都可以用来构建DataFrame,字典的 keys 为列名,列表的顺序为索引。

    使用 Numpy 来构建一个 DataFrame:

    pd.DataFrame(np.random.randint(5, size=(2, 4)))
    '''
    	0	1	2	3
    0	2	0	4	0
    1	2	2	2	1
    '''
    

    数据读取

    从csv文件读取数据:

    df = pd.read_csv('./titanic/train.csv')
    '''
         PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
    0              1         0       3  ...   7.2500   NaN         S
    1              2         1       1  ...  71.2833   C85         C
    2              3         1       3  ...   7.9250   NaN         S
    3              4         1       1  ...  53.1000  C123         S
    4              5         0       3  ...   8.0500   NaN         S
    ..           ...       ...     ...  ...      ...   ...       ...
    886          887         0       2  ...  13.0000   NaN         S
    887          888         1       1  ...  30.0000   B42         S
    888          889         0       3  ...  23.4500   NaN         S
    889          890         1       1  ...  30.0000  C148         C
    890          891         0       3  ...   7.7500   NaN         Q
    
    [891 rows x 12 columns]
    '''
    

    基本操作

    一个DataFrame由列名称、索引和数据组成。

    img

    上面,我们已经读取了一个外部数据,这是洛杉矶的人口普查数据。有些时候,我们读取的文件很大。如果全部输出预览这些文件,既不美观,又很耗时。还好,Pandas 提供了 head()tail() 方法,它可以帮助我们只预览一小块数据。

    df.head()  # 默认显示前 5 条
    df.tail(7)  # 指定显示后 7 条
    

    Pandas 还提供了统计和描述性方法,方便你从宏观的角度去了解数据集。describe() 相当于对数据集进行概览,会输出该数据集每一列数据的计数、最大值、最小值等。

    df.describe()
    

    Pandas 将 DataFrame 转化为 Numpy 数组。

    df.values()
    

    其他常用还有:

    • df.index
    • df.columns
    • df.shape

    数据选择

    数据选择常用在对数据的处理过程中,它提供了像 Numpy 中一样对数据灵活的处理方式。

    基于索引数字选择

    Pandas 中 DataFrame 是支持行索引和列索引的。.iloc方法可以接受如下类型:

    • 整数,例如5
    • 整数组成的列表,如[1, 2, 3]
    • 布尔数组
    • 可返回索引值的函数或参数

    例如,获得前3行:

    df.iloc[:3]
    

    获取1、3、5行:

    df.iloc[[1, 3, 5]]
    

    获取2-4列:

    df.iloc[:, 1:4]
    

    基于标签名称选择

    选择 'Total Population' 列到 'Total Males' 列。

    df.loc[:, 'Total Population':'Total Males']
    

    数据删减

    Pandas 中以.drop开头的函数与删除有关。

    指定删除的列或行:

    df.drop(labels=['Median Age', 'Total Males'], axis=1)
    

    去重,可以用axis指定行去重还是列去重:

    df.drop_duplicates()
    

    删除缺失值:

    df.dropna()
    

    数据填充

    检测缺失值
    df = pd.DataFrame(np.random.rand(9, 5), columns=list('ABCDE'))
    # 插入 T 列,并打上时间戳
    df.insert(value=pd.Timestamp('2017-10-1'), loc=0, column='Time')
    # 将 1, 3, 5 列的 1,3,5 行置为缺失值
    df.iloc[[1, 3, 5, 7], [0, 2, 4]] = np.nan
    # 将 2, 4, 6 列的 2,4,6 行置为缺失值
    df.iloc[[2, 4, 6, 8], [1, 3, 5]] = np.nan
    
    df.isna()
    '''
    	A	B
    0	False	False
    1	False	True
    2	True	True
    3	False	False
    4	False	False
    5	False	False
    '''
    
    填充

    用0填充df.fillna(0)

    用缺失值前面的值填充df.fillna(method='pad'),用后面的值填充df.fillna(method='bfill')

    其他的df.fillna参数请参考官方文档。

    参考

    Pandas 数据处理基础入门

    Tutorials

    一个人没有梦想,和咸鱼有什么区别!
  • 相关阅读:
    Linux下命令行安装weblogic10.3.6
    11g新特性:Health Monitor Checks
    Oracle/PLSQL: ORA-06550
    DBMS_NETWORK_ACL_ADMIN
    【RDA】使用RDA(Remote Diagnostic Agent)工具对数据库进行健康检查
    ORA-39242 错误
    Yii2 中常用的增删改查操作总结
    PHP递归函数return返回null的问题
    PHP中生成随机字符串,数字+大小写字母随机组合
    使用layer.msg 时间设置不起作用
  • 原文地址:https://www.cnblogs.com/TABball/p/12829449.html
Copyright © 2011-2022 走看看