pandas学习笔记

简介

Pandas是一个能够提供快速、灵活和富有表现力的数据结构,旨在让处理“关系”和“标记”数据更加直观。
Pandas适合的数据类型列表:

  • 具有异构类型的表格数据,如SQL表或Excel电子表格中
  • 有序和无序时间序列数据
  • 具有行和列标签的任意矩阵数据
  • 任何其他形式的观察/统计数据集

Pandas的两个主要数据结构是Series(一维)和DataFrame(二维),用来处理金融、统计、社会科学和许多工程领域。对于R语言用户,DataFrame提供了R的data.frame提供的一切甚至更多。pandas是基于Numpy之上,旨在于许多其他第三方库能够很多的集成在计算机科学环境中。

优点:

  • 轻松处理浮点和非浮点数据中缺失的数据(表示为NaN)
  • 大小可变性:可以丛DataFrame和更高维度的对象中插入和删除列
  • 自动和显示数据对齐:对象可以显式对齐到一组标签,或者用户只忽略标签,使得series、DataFrame等在计算中自动对齐数据
  • 强大、灵活的按功能分组,对数据集执行拆分应用组合,用于聚合和转换数据
  • 轻松将其他Python和NumPy 数据结构中不规则、不同索引的数据转换为DataFrame对象
  • 基于标签的智能切片、花式索引和大型数据集的子设置
  • 直观的合并和联接数据集
  • 数据集的灵活重塑和透视
  • 轴的分层标记(每个刻度可以有多个标签)
  • 强大的 IO 工具,用于从平面文件(CSV 和分隔)、Excel 文件、数据库加载数据,以及从超快HDF5 格式保存/加载数据
  • 时间序列-特定功能:日期范围生成和频率转换、移动窗口统计、移动窗口线性回归、日期偏移和滞后等。

学习

  • 对象创建
    • 传递值列表创建Series,并让pandas创建整数索引
      s = pd.Series([1, 3, 5, np.nan, 6, 8])
    • 传递日期时间索引创建DataFrame
      dates = pd.date_range('20130101', periods=6)
    • 传递标记列的NumPy数组创建DataFrame
      df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
    • 传递可转换为类似series的字典对象创建为DataFrame
      df2 = pd.DataFrame({'A': 1.,
      'B': pd.Timestamp('20130102'),
      'C': pd.Series(1, index=list(range(4)), dtype='float32'),
      'D': np.array([3] * 4, dtype='int32'),
      'E': pd.Categorical(["test", "train", "test", "train"]),
      'F': 'foo'})
    • 查看各列dtype
      df2.dtypes
  • 查看数据
    • 查看底部行
      df.tail(3)
    • 查看顶部行
      df.head()
    • 查看索引
      df.index
    • 查看列
      df.columns
    • 显示数据的快速统计摘要
      df.describe()
    • 求数据的转置
      df.T
    • 按轴排序
      df.sort_index(axis=1, ascending=False)
    • 按值排序
      df.sort_values(by='B')
  • 选择
    • 索引和选择数据和多索引/高级索引
      • 选择单列
        df['A']
      • 通过[]对行进行切片操作
        df[0:3]
    • 按标签选择
      • 使用标签获取横截面
        df.loc[dates[0]]
      • 按标签在多轴上选择
        df.loc[:,['A','B']]
      • 显示标签切片,包含两个终结点
        df.loc['20130102':'20130104', ['A', 'B']]
      • 返回降维的对象
        df.loc['20130102', ['A', 'B']]
      • 获取标量值
        df.loc[dates[0], 'A']
      • 快速访问标量
        df.at[dates[0], 'A']
    • 按位置选择
      • 按位置选择
        df.iloc[3]
      • 通过整数切片
        df.iloc[3:5,0:2]
      • 通过整数位置列表
        df.iloc[[1,2,4][0,2]]
      • 显式切片行
        df.iloc[1:3,:]
      • 显式切片列
        df.iloc[:,1:3]
      • 显式获取值
        df.iloc[1,1]
      • 快速访问值
        df.iat[1,1]
    • 布尔索引
      • 使用单个列值来选择数据
        df[df.A > 0]
      • 从满足布尔条件的数据帧中选择值
        df[df > 0]
      • 使用isin进行选择
        df2[df2['E'].isin(['two', 'four'])]
    • 赋值
      • 设置新列会自动按索引对齐数据
        s1 = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range('20130102', periods=6))
      • 标签赋值
        df.at[dates[0], 'A'] = 0
      • 索引赋值
        df.iat[0, 1] = 0
      • NumPy赋值
        df.loc[:, 'D'] = np.array([5] * len(df))
      • where设置赋值操作
        In [52]: df2 = df.copy()
        In [53]: df2[df2 > 0] = -df2
    • 数据缺失
      Pandas主要使用np.nan表示缺失的数据。
      • 重新编制索引允许您更改/添加/删除指定轴上的索引,这将返回数据的副本。
        df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
        df1.loc[dates[0]:dates[1], 'E'] = 1
      • 删除缺失数据的行
        df1.dropna(how='any')
      • 填充缺失数据
        df1.fillna(value=5)
      • 获取值为nan的布尔蒙版
        In [60]: pd.isna(df1)
        Out[60]:
        A B C D F E
        2013-01-01 False False False False True False
        2013-01-02 False False False False False False
        2013-01-03 False False False False False True
        2013-01-04 False False False False False True
原文地址:https://www.cnblogs.com/renwoixng/p/pandas-xue-xi-bi-ji.html