python库--pandas

105 阅读7分钟

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

1D: 一维数据

数据操作

  • .melt() df 将df转换为标签和值两列, api中有举例
    • frame DataFrame
    • id_vars=None list_like: 保留, 不转换的列
    • value_vars=None list_like: 转换的列, 默认转换除id_vars外的所有列
    • var_name=None 存储标签的列的列名, 默认名字variable
    • value_name='value' 存储值的列的列名
    • col_level=None 如果是多及索引则可用于指定使用的索引级别, 默认全部使用, 会生成多列标签列
  • .pivot() df
    • index ndarray, Series, 不可以是列表, 三个参数长度要一致, 含几个不重复值就表示有多少行, 每个值重复次数必须一致, 且等于列数, 且index重复值相应位置columns必须是非重复值
    • columns 同上, 不过是列标签
    • values ndarray, Series
    >>> pd.pivot(
        index=np.array(['one', 'one', 'one', 'two', 'two', 'two']), 
        columns=np.array(['A', 'B', 'C', 'A', 'B', 'C']), 
        values=np.array([1,2,3,4,5,6]))
    
    out:
         A  B  C
    one  1  2  3
    two  4  5  6
    
  • .pivot_table() df 数据透视表
    • data df
    • values=None 需要计算的那些列
    • index=None 作为索引的列
    • columns=None 作为列标签的列
    • aggfunc='mean' 对values的计算方式
    • fill_value=None 用来代替缺失值的值
    • margins=False 结果是否显示总计行/列
    • dropna=True 不包含结果都是NaN的列
    • margins_name='All' margins=True时总计行/列的名称
    >>> df
    out:
         A    B      C  D
    0  foo  one  small  1
    1  foo  one  large  2
    2  foo  one  large  2
    3  foo  two  small  3
    4  foo  two  small  3
    5  bar  one  large  4
    6  bar  one  small  5
    7  bar  two  small  6
    8  bar  two  large  7
    
    >>> pd.pivot_table(df, values='D', index=['A', 'B'],columns=['C'], aggfunc='sum', margins=True)
    out:
    C        large  small  All
    A   B
    bar one    4.0    5.0    9
        two    7.0    6.0   13
    foo one    4.0    1.0    5
        two    NaN    6.0    6
    All       15.0   18.0   33
    
  • .crosstab df 类似于pivot() + pivot_table()
  • .cut()   划分数据, 返回每个值对应的区域
    • x list_like: 一维
    • bins
      • int: 由最小和最大值计算等长面元分为n份
      • list_like: [0,3,5]表示按(0,3],(3,5]进行划分
    • right=True True: 左开右闭;  False: 左闭右开
    • labels=None 划分结果显示的标签,  False: 用range(n)标号
    • retbins=False 是否返回bins设置的值(矢量, 整数会转换成对应的矢量)
    • precision=3 存储和显示分类标签的精度(默认3)
    • include_lowest=False False:第一个间隔不包括左侧值,如(0,3]不含0.  True:(<0,3]
  • .qcut()   划分数据, 按照分位数进行划分
    • x list_like: 一维
    • q
      • int: 按q分位数进行切割
      • list_like: 分位数, 如[0, 0.5, 1]表示0%~50%, 50%~100%
    • labels=None 划分结果显示的标签,  False: 用range(n)标号
    • retbins=False 是否返回bins设置的值(矢量, 分位数会转换成对应的矢量)
    • precision=3 存储和显示分类标签的精度(默认3)
    • duplicates='raise'
      • 'raise': 如果bin值不是唯一的, 则引发错误
      • 'drop': 忽略重复值
  • .merge() df 根据两个df某列进行合并
    • left df
    • right df
    • how='inner'
      • 'inner': 取键的交集
      • 'left': 保留左键的完整
      • 'right': 保留右键的完整
      • 'outer': 取键的并集
    • 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新增
      • 'one_to_one' or '1:1': 检查合并键在左右数据集中是否唯一
      • 'one_to_many' or '1:m': 检查合并键在左侧数据集中是否是唯一的
      • 'many_to_one' or 'm:1': 检查合并键在右侧数据集中是否是唯一的
      • 'many_to_many' or 'm:m': 不做检查
  • .merge_ordered() df 根据两个df某列进行合并, 并对缺失值按要求填充
    • left df
    • right df
    • on=None 左右两个df都存在的列, 将在此列上合并
    • left_on=None 左侧df要与右侧df要对齐的列
    • right_on=None 右侧df要与左侧df要对齐的列
    • left_by=None 按选中的列分组, 填充将按照分组执行
    • right_by=None 按选中的列分组, 填充将按照分组执行
    • fill_method=None {'ffill', None} 数据的插值方法
    • suffixes=('_x', '_y') 重复列后缀
    • how='outer' {'left', 'right', 'outer', 'inner'}
  • .merge_asof()0.19.0 df 合并两个df, 但不再是根据相等合并而是与离左侧最近的合并
    • left df
    • right df
    • on=None 左右两个df都存在的列, 将在此列上合并. 必须有序而且要是数字列(时间, int, float)
    • left_on=None 左侧df要与右侧df要对齐的列
    • right_on=None 右侧df要与左侧df要对齐的列
    • left_index=False 左侧df是否使用索引与右侧对齐  0.19.2
    • right_index=False 右侧df是否使用索引与左侧对齐  0.19.2
    • by=None
    • left_by=None
    • right_by=None
    • suffixes=('_x', '_y') 重复列后缀
    • tolerance=None
    • allow_exact_matches=True
    • direction='backward'
  • .concat() S/df 多个S/df进行合并操作, axis=0 时相同标签的列对应追加, axis=1 时相当于合并列
    • objs [S/df]
    • axis=0 {0/’index’, 1/’columns’}: 操作轴
    • join='outer' {‘inner’, ‘outer’}: 做交集还是并集
    • join_axes=None [index]:
    • ignore_index=False True: 将不使用原索引而是使用 0 ~ n-1
    • keys=None 新增一个最外层索引, 数量跟合并的 S/df 数量一致
    • levels=None
    • names=None [index_name]: 合并结果的多级索引名
    • verify_integrity=False 检查新的连接轴是否有重复项
    • copy=True 如果为False则不进行没有必要的数据复制
  • .get_dummies() df 将元素作为标签, 用0和1表示相应索引位置是否是次元素
    • data list_like, Series, df
    • prefix=None 多列值加上相应前缀
    • prefix_sep='_' 前缀跟值之间的分隔符
    • dummy_na=False 是否显示空值结果
    • columns=None 列名
    • sparse=False 是否返回稀疏结果
    • drop_first=False 删除第一个元素生成的列
  • .factorize() Tuple 将传入的值返回成一个 (labels, uniques)
    • values 1D
    • sort=False 是否对值进行排序
    • order=None
    • na_sentinel=-1
    • size_hint=None 提示哈希表大小
  • .unique() ndarray values 1D: 返回无重复值的结果
  • .wide_to_long() df 提取并合并指定字符串开头的列
    • df DataFrame
    • stubnames str, [str]: 提取以指定字符串开头的列
    • i column: 用作索引的列
    • j 提取开头后剩余的内容会生成一列, 在此指定此列名
    • sep='' 分隔符 0.20
    • suffix='\\d+' 捕获正则表达式匹配的后缀 0.20

缺失数据

  • isna() bool/[bool] obj 判断给定对象的元素是不是空值
  • isnull() bool/[bool] obj 判断给定对象的元素是不是空值
  • notna() bool/[bool] obj 判断给定对象的元素是不是非空值
  • notnull() bool/[bool] obj 判断给定对象的元素是不是非空值

转换

  • .to_numeric() S/ndarray 将给定数据转换为数字类型
    • arg 1D
    • errors='raise'
      • 'raise': 无效的解析将引发异常
      • 'coerce': 无效的解析将被设置为NaN
      • 'ignore': 无效的解析将返回输入
    • downcast=None 向下转换 0.19.0
      • 'integer' or 'signed': 最小有符号int类型 (np.int8)
      • 'unsigned': 最小无符号int类型 (np.uint8)
      • 'float': 最小浮点数类型 (np.float32)
      • None: np.float64

处理日期时间

  • .to_datetime()   将输入值转换为datetime
    • arg integer, float, string, datetime, 1D
    • errors='raise'
      • 'raise': 无效的解析将引发异常
      • 'coerce': 无效的解析将被设置为NaT
      • 'ignore': 无效的解析将返回输入
    • dayfirst=False 是否将输入数据认为是 天-月-年 的格式识别
    • yearfirst=False 是否将输入数据认为是 年-月-天 的格式识别
    • utc=None
    • box=True
      • True: 返回DatatimeIndex
      • False: 返回ndarray
    • format=None 时间解析格式, %d%m%Y
    • exact=True
      • True: 需要精确的匹配格式
      • False: 允许格式匹配目标字符串中的任何位置
    • unit=None 当输入整数或浮点数的时候, 用此参数指定单位(D,s,ms,us,ns), 默认 'ns'
    • infer_datetime_format=False True 且没有给出格式, 将尝试推断字符串格式, 并且如果可以推断, 则切换到解析它们的更快方法
    • origin='unix' 定义参考日期, 那么整数或浮点数将按照从此日期开始计算
  • .to_timedelta()   将输入值转换为timedelta
    • arg, unit, box, errors 参考.to_datetime()
  • .data_range()