python库--pandas--DataFrame

392 阅读16分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

格式说明:

  • 方法 返回值类型 说明
    • 参数 说明

初始化DataFrame

  • DataFrame() df data=None 2D数据或字典
    • index=None 索引
    • columns=None 列标签
    • dtype=None 数据类型
    • copy=False 是否复制数据

属性及底层数据结构

  • .as_matrix() ndarray columns=None 返回指定列(默认全部)
  • .get_dtype_counts()     返回dtype的计数结果
  • .get_ftype_counts()     返回ftype的计数结果
  • .select_dtypes() df 选择或排除指定数据类型的列
    • include=None 标量或list_like, 要选择的列
    • exclude=None 标量或list_like, 要排除的列
  • .memory_usage()   Series df的内存使用情况
    • index=True 索引是否参与计算
    • deep=False 是否计算df引用的对象的内存使用情况
  • .index   行标签
  • .columns   列标签
  • .values ndarray df的值
  • .dtypes Series df每一列的数据类型
  • .ftypes Series 返回df每一列是稀疏还是稠密, 以及数据类型
  • .axes list 返回 [行标签, 列标签]
  • .ndim int 轴数
  • .size int df的元素数量
  • .shape tuple df的形状

转换

  • .astype() df 转换数据类型
    • dtype np.dtype 或 {列名: np.dtype}
    • copy=True 是否复制基层数据
    • errors='raise' 'raise': 转换失败则报错; 'ignore': 转换失败则保留原数据类型
    • **kwargs 更多关键字参数
  • .infer_objects() df 试图推断更好的dtypes
  • .copy() df 拷贝数据
    • deep=True False: 同赋值号, True: 拷贝数据, 但不会深层拷贝
  • .isnull() df 判断对应位置元素是否是空值, 0.22版本新增.isna()
  • .notnull() df 判断对应位置元素是否不是空值, 0.22版本新增.notna()

索引, 迭代

  • .head() df n=5 返回前n行
  • .at[i, c]   标量 基于标签的访问器
  • .iat[m, n]   标量 基于位置的访问器
  • .loc[i, c]
    • [i, c] 基于单个标签访问
    • [[i1,i2], [c1,c2]] 基于多个标签访问
    • [i1:i2, c1:c2] 包括边界
    • [bool_df] 仅保留True位置的值
  • .iloc[m, n]   参考.loc, 不过是基于位置的
  • .insert() df 新增列
    • loc 要插入的位置[0, len(columns)]
    • column 要设置的列标签
    • value 要插入的值
    • allow_duplicates=F 列标签是否允许重名
  • .__iter__() iter 返回一个列标签迭代器
  • .iteritems() iter 返回列迭代器 (列名, Series)
  • .iterrows() iter 返回行迭代器 (索引, Series)
  • .itertuples() iter 返回行迭代器 Pandas(Index=i1, c1=v1, c2=v2, ...)
    • index=True 是否返回索引
    • name='Pandas'
  • .lookup() ndarray 返回 [df.loc[i1,c1], df.loc[i2,c2], ...]
    • row_labels [i1, i2, ...]
    • col_labels [c1, c2, ...]
  • .pop() Series item 删除并返回指定列
  • .tail() df n=5 返回后n行
  • .xs()   返回指定行或列
    • key 行标签或列标签, 可以是Multilndex (c_name or int)
    • axis=0
    • level=None 标量或list_like. 指定key是多级索引中的哪几级
    • drop_level=True 是否删除level指定的那几级索引
  • .isin() df 判断元素是否在values中
    • values
      • list: 判断所有元素是否在此列表中
      • dict: {c: []} 判断对应列的值是否在字典对应列表中
      • df: 对应列名, 包含且index相同才返回True
  • .where() df 把df中不满足条件的那些值替换为other
    • cond 跟df同形状的bool元素组成的2D数据
    • oter=nan 标量或df. False对应的值替换为other
    • inplace=False 是否本地修改
    • axis=None df和other对齐的轴, 另外一个轴按顺序对齐
    • level=None 如有需要, 对齐级别
    • errors='raise' 此参数目前无效
    • try_cast=False 尝试将结果转换为输入类型
    • raise_on_error=N 0.21弃用
  • .mask() df 与where相反, 将满足条件的替换为other
  • .query() df 返回满足条件的行
    • expr 比如 'c1 > c2' 返回满足c1>c2的那些行 (也可用@符号调用变量)
    • inplace=False 是否本地修改
    • **kwargs pandas.eval()

运算符

  • .add() df 加法运算, 类似df+other
    • other 常量, Series或df
    • axis='columns' {0, 1, 'index', 'columns'}, other为Series时生效
    • level=None int或name. 在一个级别上广播
    • fill_value=None 用来填充缺失值的值, 若两个df位置都丢失, 结果将会丢失
  • .sub; .mul; div; .truediv; .floordiv; .mod; .pow 同 -   *   /   /   //   %   **
  • .radd; .rsub; ... 右侧运算, 即 other - df 等
  • .lt ; .gt ; .le ; .ge ; .ne ; .eq 同 <   >   <=   >=   !=   ==
  • .combine() df 使用自定义函数运算
    • other df
    • func 传入两个Series(两个df的对应列), 返回一个Series
    • fill_value=None 标量
    • overwrite=True
  • .combine_first() df other 按照索引求并集, 优先保留左侧值

功能应用, 分组及窗口

  • .apply() df 对df中的每一行(列)执行操作
    • func 传入一个Series, 返回一个Series
    • axis=0
      • 0或'index': 传入的是列
      • 1或'columns': 传入的是行
    • broadcast=False 是否广播, 对于聚合函数, 返回和传播值相同大小的对象
    • raw=False True: 传入函数的将是ndarray而不是Series(性能更好)
    • reduce=None True: 返回Series(若无法返回Series将返回df), False: 返回df
    • args=() 其它位置参数传递给func
    • **kwds 其它关键词参数传递给func
  • .applymap() df 对每一个元素执行func
    • func 传入一个值, 返回一个值
  • .agg[regate]()   df 对每一列(行)执行某一操作
    • func
      • '内置函数名': 对每一列(行)执行此操作(如'sum')
      • function: 要对每一列(行)执行的操作
      • ['内置函数名'] or [function] 对每一列(行)执行多个操作
      • dict: {name: function or functions} 对对应列(行)执行对应操作
    • axis=0 0: 对每一列执行操作, 1:对每一行执行操作
    • *args 传递给函数的位置参数
    • **kwargs 传递给函数的关键词参数
  • .transfrom() df func 参考.agg
    • *args
    • **kwargs
  • .groupby() obj 对数据进行分组, 分组后使用sum之类的方法可以计算分组后的结果
    • by [c1, c2]: 选中某些列作为分组标准
    • axis=0
    • level=None 多级索引的级别名称
    • as_index=True 分组的列是否作为结果的索引
    • sort=True
    • group_keys=True
    • squeeze=False
    • **kwargs
  • .rolling() obj 指定窗口, 步长为1移动窗口, 可对窗口中内容分别进行运算, 比如.sum()
    • windows 窗口大小(n行/列)
    • min_periods=None 允许的最小窗口
    • freq=None
    • center=False 是否将计算结果放到中心而不是右侧
    • win_type=None 参考scipy.signal(默认所有点均匀加权)
    • on=None 在指定列来计算滚动窗口而不是索引(此列将不参与计算)
    • axis=0
    • closed=None
  • .expanding() obj 累计计算, 比如加.sum()累加等
    • min_periods=1 参考.rolling
    • freq=None
    • center=False
    • axis=0
  • .ewm() obj  

计算/描述统计

  • .abs() df 对所有元素求绝对值, 仅适用于全为数字的对象
  • .all() S/df 判断每一列(行)是否全为True
    • axis=None
    • bool_only=None 是否仅计算bool类型的值
    • skipna=None
    • level=None 用于指定多级索引
    • **kwargs
  • .any() S/df 判断每一列(行)是否存在True (参数同.all)
  • .clip() df 限定取值范围(范围外的的将被更新为设定的最小值或最大值)
    • lower=None float或array_like. 最小值
    • upper=None 最大值
    • axis=None
    • inplace=False 是否本地修改
    • *args
    • **kwargs
  • .clip_lower() df 同.clip, 但只给出下限
    • threshold 界限值
  • .clip_upper() df 同.clip_lower, 但给出的是上限值
  • .corr() df 计算列的成对相关性, 不包括Na值
    • method='pearson'
      • 'pearson': 标准相关系数
      • 'kendall'
      • 'spearman'
    • min_periods=1
  • .corrwith() df 计算两个df之间的成对相关系数
    • other df
    • axis=0
    • drop=False
  • .count() S/df 统计, 统计非NaN的数量
    • axis=0 轴  {0 or 'index', 1 or 'columns'}
    • level=None 如果轴是MultiIndex, 则沿指定级别进行计数, 折叠到DataFrame中
    • numeric_only=False 是否仅对 float, int, bool 类型数据进行统计
  • .cov() df 计算列的成对协方差, 不包括NA
    • min_periods=None 每列所需的最小观察次数, 以获得有效结果
  • .cummax() df 下面一个值更新为其上面最大的一个值(即累积最大值)
    • axis=None
    • skipna=True 是否忽略空值, False: Na下面全部被更新为Na
  • .cummin() df 参考.cummax(), 但更新为累积最小值
  • .cumprod() df 参考.cummax(), 但更新为累积积
  • .cumsum() df 参考.cummax(), 但更新为累积和
  • .describe() df 生成统计描述, count, mean, std, min, max, ...
    • percentiles=None 输出相应的百分位数0~1, 默认 [.25, .5, .75]
    • include=None 返回到结果中的白名单(列)
      • 'all': 所有列都将包含在输出中
      • list_like: 将结果限制为指定类型, np.number显示数字类型的统计结果, np.object显示对象类型的统计结果, 'O'显示字符串类型的统计结果
      • None: 结果将包含所有数字列
    • exclude=None 从结果中省略的黑名单, list_like or None
  • .diff() df 下面的值跟上面的差
    • periods=1 下面值跟上面第 periods 个值的差
    • axis=0
  • .eval()   将字符串转换为表达式
    • expr
      • 'a+b': 返回df的a列与b列相加的结果
      • 'c=a+b': 新增一列c为a列与b列相加的结果
      • '1+1': 返回1+1的结果
    • inplace=False 是否本地修改
    • **kwargs 更多参数参考pandas.eval()
  • .kurt() S/df 无偏峰度
    • axis=None
    • skipna=None(True) 计算时是否排除空值
    • level=None 如果轴是MultiIndex, 则沿指定级别进行计算, 返回df
    • numeric_only=None 是否仅对 float, int, bool 类型数据进行计算

重新索引/选择/标签操作

  • .add_prefix() df prefix 将列标签前面加上前缀prefix
  • .add_suffix() df suffix 将列标签前面加上后缀suffix
  • .align() tuple 更新索引并以(df1, df2)的形式返回, 缺失值以nan补全
    • other df或Series
    • join='outer'
      • 'outer': 新索引为s与s2的并集
      • 'inner': 新索引为s与s2的交集
      • 'left': 新索引为s的索引
      • 'right': 新索引为s2的索引
    • axis=None
    • level=None 指定多级索引的级别
    • copy=True 是否返回新对象
    • fill_value=None 缺失值使用的值, 默认为np.nan
    • method=None
    • limit=None
    • fill_axis=0
    • broadcast_axis=N 沿该轴广播
  • .drop() df 删除对应索引或标签
    • labels=None 要删除的行(列), 单一标签或list_like
    • axis=0
    • index=None 0.21新增, 相当于(label, axis=0)
    • columns=None 0.21新增, 相当于(label, axis=1)
    • level=None 指定多级索引的级别
    • inplace=False 是否本地修改
    • errors='raise' 'ignore': 忽略错误
  • .drop_duplicates() df 删除重复项
    • subset=None 列标签或标签序列, 只考虑识别选中列的重复项, 默认所有列
    • keep='first'
      • 'first': 仅保留第一次出现的副本(默认)
      • 'last': 删除重复项, 但最后一项除外
      • False: 删除所有重复项
    • inplace=False 是否本地修改
  • .duplicated() df 返回是否是重复项的bool表示结果
    • subset=None 列标签或标签序列, 只考虑识别选中列的重复项, 默认所有列
    • keep='first'
      • 'first': 除第一次出现外, 标记重复为True
      • 'last': 除了最后一次出现, 标记重复为True
      • False: 将所有重复项标记为True
  • .equals() bool other 判断两个df中的元素是否相同, 同位置的nan被识别为相同
  • .filter() df 子集查询
    • items=None list_like: [index or columns]
    • like=None string: 保留含有此字符串的那些 columns or index
    • regex=None 使用正则匹配
    • axis=None 轴, 默认为columns
  • .first() df 基于时间的子集查询
    • offset '10D': 表示取出前10天的数据
  • .head() df n=5 显示前n条数据
  • .idxmax() Series 返回请求轴上最大值对应的索引(或标签)
    • axis=0 默认返回每一列最大值对应的索引, 标签作为索引, 查找到的索引作为值
    • skipna=True 是否排除空值
  • .idxmin() Series 同上不过是最小值
  • .last() df 同.first(), 不过是后n天
  • .reindex() df 根据新索引/标签返回数据, 原数据中存在的索引/标签对应的值将被返回, 新的索引/标签对应的值默认为nan
    • labels=None 新的标签/索引, 根据axis值来定, 默认索引
    • index=None 新索引
    • columns=None 新标签
    • axis=None
    • method=None {None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}: 填充方法
    • copy=True 是否返回一个新对象
    • level=None 索引/标签级别
    • fill_value=nan 缺失值填充
    • limit=None 向前或向后填充的连续最大填充次数
    • tolerance=None 公差???
  • .reindex_axis() df 同 reindex() 不过没有 index 和 columns 参数
  • .reindex_like() df 新对象的 索引/标签 同传入的df的 索引/标签 相同
    • other 传入的df
    • method, copy, limit, tolerance
  • .rename() df 更改 索引/标签 名
    • mapper=None fun, dict-like: 结合axis使用, 表示 索引/标签
    • index=None 更改索引
    • columns=None 更改标签
    • axis=None
    • copy=True 是否生成新对象
    • inplace=False 是否本地修改
    • level=None 多级索引的操作级别
  • .rename_axis() df 同上: mapper, axis=0, copy, inplace
  • .reset_index() df 将索引作为df中的一列值
    • level=None 多级索引, 操作的索引级别
    • drop=False 是否删除索引转换出来的列
    • inplace=False 是否本地修改
    • col_level=0 如果columns是多级的, 转换出来的列的标签名的级别
    • col_fill='' 指定多级索引其它级别的name, None表示重复索引名
  • .sample() df 随机返回n个样本
    • n=None 返回的项目数, 默认1
    • frac=None 返回的百分比, 0.0-1.0, 不能与n同时使用
    • replace=False 是否允许重复
    • weights=None
      • None: 等概率加权
      • Series: 相同索引的被设置为对应权重, 未出现的被设置为0
    • random_state=None 随机数种子
    • axis=None 轴, 默认为0
  • .select() df 返回满足条件的数据
    • crit function: 在每个 索引/标签 上调用, 返回 bool 的函数
    • axis=0
  • .set_index() df 将某些列作为索引
    • keys column, [columns], [[跟df等长的其它来源索引]]
    • drop=True 是否删除作为索引的那些列
    • append=False 是否将列追加到现有索引
    • inplace=False 是否本地修改
    • verify_integrity=False 是否检查新索引, False会直到需要时再检查
  • .tail() df n=5 返回最后n行
  • .take() df 返回指定行/列
    • indices [int]: 返回指定的那些行/列
    • axis=0 行/列
    • convert=None 是否允许使用负指数, 默认True, 0.21.0 被取消, 始终允许
    • is_copy=True 是否返回原始对象的副本
    • **kwargs  
  • .truncate()   截取两个 索引/标签 之间的数据
    • before=None 截断此值之前的所有数据
    • after=None 截断此值之后的所有数据
    • axis=None 轴, 默认操作索引
    • copy=True 是否拷贝

缺失数据处理

  • .dropna() df 删除含有na的行(列)
    • axis=0
    • how='any' {'any', 'all'}
    • thresh=None 有效值个数, 有效值低于此值的行(列)被删除
    • subset=None list_like. 列(行)标签列表, 只考虑列表中的列(行)
    • inplace=False 是否本地修改
  • .fillna() df 使用指定方法填充空值
    • value=None
      • 标量: 使用此值替换na值
      • dict/Series: 对应标签的列按照对应的值填充
      • df: 对应为值的值填充对应位置
    • method=None {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}
    • axis=None {0 or ‘index’, 1 or ‘columns’}
    • inplace=False 是否本地修改
    • limit=None 每行(列)最大填充次数
    • downcast=None
    • **kwargs
  • .replace() df 将to_replace中给出的值替换为value
    • to_replace=None
      • str: 字符串精确匹配
      • regex: 正则表达式匹配
      • list: 若value也是list则需相同长度, 一一对应替换
      • dict:
      • None:
    • value=None 参考.fillna
    • inplace=False 是否本地修改
    • limit=None 每行(列)最大填充次数
    • regex=False True: 将to_replace作为正则表达式解析
    • method='pad' {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}
    • axis=None {0 or ‘index’, 1 or ‘columns’}

形状变换, 排序, 转置

  • .pivot() df 重新整形数据(数据透视表), 参考pd.pivot()
    • index=None 作为索引的列
    • columns=None 作为列标签的列
    • values=None 作为值的列
  • .reorder_levels() new obj 对对及索引进行重排
    • order [str or int]: 按指定顺序对索引进行重排, 不能遗漏和重复
    • axis=0 对哪里进行重排
  • .sort_values() df 按值排序 0.17.0
    • by str or list of str: 在这些列上排序
    • axis=0 {0 or ‘index’, 1 or ‘columns’}: 默认按行排序
    • ascending=True bool or bools: 是否按升序排序, 如果是bools则长度需和by相同
    • inplace=False 是否在本地修改
    • kind='quicksort' {‘quicksort’, ‘mergesort’, ‘heapsort’}: 排序算法, 其它算法只支持单列
    • na_position='last' {‘first’, ‘last’}: 空值放在开头或结尾(默认放在结尾)
  • .sort_index() df 对索引或列标签排序
    • axis=0 默认对索引进行排序
    • level=None int or level name or list: 需要排序的索引级别
    • ascending=True 是否升序排序
    • inplace=False 是否本地修改
    • kind='quicksort' 排序算法
    • na_position='last' {‘first’, ‘last’}: 空值放在开头或结尾(默认放在结尾)
    • sort_remaining=True 按指定级别排序后是否对其他级别进行排序(按顺序)
    • by=None ??
  • .nlargest() df 对指定列进行降序排序并截取n个, 可结合groupby使用
    • n int: 截取的个数
    • columns list or str: 指定降序排序的列
    • keep='first' {‘first’, ‘last’}: 对于重复值保留第一次(或最后一次)出现的
  • .nsmallest() df 同 .nlargest() 不过是升序排序
  • .swaplevel() new obj 对指定的两个索引级别进行交换
    • i=-2, j=-1 int, string
    • axis=0 对index还是对columns执行
  • .stack() df/S 索引作为前n级索引, 最后一级columns作为第n+1级索引, 剩余columns作为新columns
    • level=-1 int, string, list: 指定堆叠到索引的columns的级别
    • dropna=True 是否删除没有有效值的行
  • .unstack() df/S 将多级索引拆成新 index 和 columns
    • level=-1 int, string, list: 要作为columns的索引级别
    • fill_value=None 缺失值填充
  • .melt() df 将columns作为某列值
    • id_vars=None 作为id的列, 保持不变
    • value_vars=None 作为值的列
    • var_name=None 默认 'variable' columns名生成的列的列名
    • value_name='value' 值列的列名
    • col_level=None 如果columns是多级的则使用此指定级别进行操作
  • .T df 转置
  • .to_panel() Panel 将df转换为 3D 的Panel
  • .to_xarray()   ???
  • .transpose() df *args, **kwargs 转置

组合/加入/合并

  • .append() df 追按照列标签进行追加操作, 缺失使用nan填充
    • other df
    • ignore_index=False 是否不使用索引标签
    • verify_integrity=False 是否不允许存在重复索引
  • .assign() df 新增列
    • **kwargs
      • 列名 = func: 传入df, 返回一列值的函数
      • 列名 = 标量: 此列值都为此标量
      • 列名 = list_like: 跟df同长度
      • 列名 = Series: Series中跟df索引相同的作为新列的值, 缺失nan
  • .join() df 新增列
    • other
      • df: 列标签不能跟左侧df重复(重复的话需设置suffix)`
      • Series: 需要有name属性
      • list: [df]
    • on=None 列名, 与右侧df索引对齐的列而不是索引
    • how='left'
      • 'left': 新df的索引参照左侧df
      • 'right': 新df的索引参照右侧df
      • 'outer': 新df的索引参照两个df索引的并集
      • 'inner': 新df的索引参照两个df索引的交集
    • lsuffix='' 若列标签重复, 左侧df的标签将被加上后缀
    • rsuffix='' 若列标签重复, 右侧df的标签将被加上后缀
    • sort=False 是否对结果按照索引排序
  • .merge() df 可实现根据左右df某两列的值进行合并
    • right df
    • how='inner' 参考.join
    • on=None 左右两个df都存在的列, 将在此列上合并
    • left_on=None 左侧df要与右侧df要对齐的列
    • right_on=None 右侧df要与左侧df要对齐的列
    • left_index=False 左侧df是否使用索引与右侧对齐
    • right_index=False 右侧df是否使用索引与左侧对齐
    • sort=False 结果是否按照索引排序
    • suffixes=('_x','_y') 重复列后缀
    • copy=True 是否生成新对象
    • indicator=False 是否显示此行数据来源('left_only', 'right_only', 'both')
      • True: 此列标签将被设置为'_merge'
      • str: 设置此列标签为此字符串
    • validate=None 0.21新增
  • .update() df 将左侧df相应列相同索引的值更新为右侧的值, 不存在则保留原值(本地修改)
    • other df, 有name属性的Series
    • join='left' 无其它取值, 此参数不能被设置为其它值
    • overwrite=True 覆盖?????
    • filter_func=None
    • raise_conflict=F 若两个df存在同一数据来源, 将报错