Pandas操作总结

16 篇文章 1 订阅
11 篇文章 3 订阅

Pandas小结


具体操作详见: 链接

  • pandas概念

    • 开源的数据挖掘库 用于数据探索
    • 封装matplotlib,numpy
    • 三种结构 DataFrame 、multiIndex、Series
  • multiIndex

    • 把dataframe进行整合
    • df.index df.index.names
  • Series

    • pd.Series(np.arange())
    • pd.Series([],index=[])
    • pd.Series({})
    • 对象.index = [‘a’,‘b’,‘c’]
    • 可以看作一维数组
  • 通过类似字典标记的方式或属性的方式,可将DataFrame的列获取为一个Series 对象[‘列名’]

  • 创建DataFrame,修改index和columns

    • pd.DataFrame(ndarry,index= ,columns= )
  • 创建日期

    • pd.date_range()
      • start – 开始日期
      • end – 结束日期
      • periods – 时间跨度 与end选其一即可
      • freq – 统计时间方式
  • 行索引,叫index,axis=0

  • 列索引,叫colums,axis=1

  • 对象.head() 对象.tail()

  • 索引

    • **直接取值的时候 先列后行 **
    • loc
      • 先行后列 索引值
      • 标签索引
      • loc中能传入的只有布尔列表和索引子集构成的列表,
      • 所有在loc中使用的切片全部包含右端点
    • iloc
      • 先行后列 索引值的下标
      • 位置索引
      • iloc 中接收的参数只能为整数或整数列表或布尔列表,不能使用布尔Series,如果要用就必须如下把values拿出来
      • 切片不包含右端点
    • Index对象是不可修改的 index = 对象.index index[1] = ‘d’ 错误
    • Index的方法和属性
      • diff 计算差集
      • intersection 计算交集
      • union计算并集
      • delete 删除索引i处元素,得到新Index
      • drop 删除传入的值,得到新index
      • insert 元素插入索引i处元素,返回True
    • 对象.reset_index(drop=False)
      • 默认 drop=False 不删除原来索引
      • drop = True 删除原来索引
    • 对象.set_index(drop=True,keys=)
      • 默认 drop=True 删除原来索引
      • 如果索引是两个的时候就是multiIndex
    • 对象.reindex(index=[],method=’’,colums=[]) 创建一个适应新索引的新对象
      • method = ffill、pad 前向填充(搬运)值
      • method = bfill、backfill 后向填充(搬运)值
    • 修改行或列名
      • df.rename(index={‘需要替换的值’:‘替换后的值’},columns={‘col1’:‘new_col1’})
  • 赋值操作

    • 对象.列名
    • 对象[’’]
    • 对象.drop([‘名称’],axis=) 删除列、行 默认axis=0
    • 对象[ : 2]
    • 对象.drop(index = ‘’,columns=’’)
  • 排序

    • 对象.sort_values(by=[列名,列名] , ascending = True)
    • 对象.sort_index(ascending = True,axis=,by=)
    • 默认升序
    • 任何缺失值默认放到Series的末尾
  • 算术运算

    • 直接用方法 add(fill_value=0) 原来没有重叠的位置就会产生NA值 传入fill_value=0 现在会填充0
    • sub() div() mul()
    • 对象.query(’") 逻辑运算函数 参数:" 字段名 > 2 & 字段名 < 4 "
    • 对象.isin([value])
  • 统计运算

    • 对象.describe()
    • mode 众数 出现最多的数 知道即可
    • median() 中位数 排序后取值(两数平均值)
    • idxmax() 获取最大值的索引
    • df.sum(axis=,skipna=,level=‘列名’) skipna排除缺失值,默认为True level在某条轴上求和
    • var() 方差 std()标准差
    • diff 计算一阶差分 对时间序列很有用
    • corr() 相关系数
    • cov() 协方差
    • unique() 取唯一值数据
    • value_counts() 统计出现的频率
    • isin([])
    • 累计求和
      • cumsum 累计求和
    • 添加新的列
      • df1.assign(列名’=pd.Series(list(‘def’))) 不会对原DataFrame修改
      • df1[‘列名’] = list(‘abc’)
    • nlargest函数返回前几个大的元素值
  • 自定义运算

    • data[[‘字段名’]].apply(func,axis=0)
    • func可以为匿名函数
    • data[[‘b’]].apply(lambda x:x.max()-x.min(),axis = 0)
    • del 对象.[‘列名’] 删除列
    • 对象.apply(pd.value_counts).fill(0)
  • 读取文件

    • pd.read_csv(路径 , sep=’,’ , usecols = [需要的列] ,index_col=)
      • 参数 names =[] 可为文件分配列名
      • index_col 指定索引
      • skiprows = [] 跳过文件的第x行
      • nrow= 读取的行数
    • pd.read_table() 默认分隔符为制表符\t
    • pd.load()
    • pd.to_csv(路径 , sep = ‘,’ , columns=[] ,header=True,index = True ,)
      • sep 以什么为分割
      • columns: 需要哪列 并按照你指定的顺序排列
      • mode: 方式 ‘w’: 重写 ‘a’:追加
      • index:是否写进索引 行标签
      • header :列标签
    • pd.read_hdf(路径, key = None, ** kwargs)
    • pd.to_hdf(xxx.h5,key = )
      • 读取h5文件
    • pd.read_json(路径,orient=,type=,lines= )
    • pd.to_json(路径,orient=)
      • 一般 orient = ‘records’ 按照什么方式进行读取或者写入
      • lines一般为True 是否按照行读取和写入
    • import json
      • json.load()把json转为python形式
      • json.dumps() 把python对象转为json
    • 推荐实用hdf
      • 压缩方式为blose,速度快
      • 压缩后提高利用率,节省空间
      • 支持跨平台
  • 处理缺失值

    • np.NaN的类型是float
    • df.isnull() 判断是否有缺失值 np.any(pd.isnull()) 有返回True
    • df.notnull() np.all(pd.notnull()) 有返回False
    • 对象.dropna(axis=,how=,thresh=) 删除有NaN数据的一行 how=‘all’ 只丢弃全为NA的那些行
    • df.fillna(value,inplace=True) 替换有NaN的数据
      • value 替换的值
      • inplace True修改原数据 False 不替换修改原数据,生成新对象
      • df.fillna({‘a’:0.5,‘b’:-1}) columns 为a的填充为0.5 b的填充为-1
      • df.fillna(method=‘ffll’) 前向填充值 与reindex有效的插值方法相同
    • 对象[列名].fillna(value = 对象[列名].mean())
    • 替换思路 把 ?替换为np.NaN
    • 对象.repalce(to_replace=需要替换的值 ,value=替换后的值 )
  • 数据离散化

    • 把一些数据分到某个区间,最后用不同的符号或者数字表达
    • pd.qcut(data,q=分组个数) 把数据大致分成数量相等的几类 qcut = pd.qcut(data,10) qcut.value_counts()
    • 对象.value_counts() 数量统计
    • pd.cut(data,bins=自定义分组) 指定分组间隔 自定义分组bins= [-7,-3,0,3,7]
    • one-hot编码 把数据转为为0,1统计类型 别名:哑变量、热独编码
    • pd.get_dummies(data,prefix=分组名称) 增加columns的前缀
    • pd.interval_range(start=,periods=区间个数,freq=步长,end=)
  • 数据合并

    • pd.concat([data1,data2],axis = 1)
    • pd.merge(left,right,how='inner’or ‘outer’,on=,left_on=,right_on=)
      • 拼接方式 how = 'inner’or ‘outer’ or ‘left’ or ‘right’ 与sql一样
  • 交叉表和透视表

    • 交叉表 用于计算一列数据对于另一列数据的分组个数 (寻找两列之间关系)
    • pd.crosstable(value1 , value2) 返回具体数量
    • 透视表 DataFrame.pivot_table(values=[],index=[],columns=[]) * 把Index 转为 DatetimeIndex pd.to_datetime(data.index)
  • 分组与聚合

    • DataFrame.groupby(key, as_index = False)
    • data.groupby([‘color’])没有意义 需要聚合
    • data.groupby([‘color’])[‘size’].mean() 按颜色分组对大小取平均值
    • data.groupby(‘userId’).agg([list]) 转为列表
    • as_index = False 多加一个索引
  • 层次化索引

    • 在一个轴上有多个索引级别
    • df.unstack()
    • df.stack()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值