pandas高级数据处理学习笔记

视频来源:

https://www.bilibili.com/video/BV1xt411v7z9?p=56

一、缺失值处理

  1. 缺失值是Nan类型

    1.1 判断是否存在缺失值Nan

    pd.isnull(df)
    pd.notnull(df)
    

    实例

    import pandas as pd
    import numpy as np
    
    data=pd.read_csv('')
    np.any(pd.isnull(data))  # 返回True,说明存在缺失值
    pd.isnull(data).any() # 返回True,说明存在缺失值
    np.all(pd.notnull(data)) # 返回False,说明存在缺失值
    pd.notnull(data).all() # 返回False,说明存在缺失值
    

    1.2 删除缺失值样本

    data1=df.dropna(inplace=False) # 默认按行删除,默认False,不改变原数据,
    

    1.3 替换、插补数据

    data=df.fillna(value,inplace=False) # 默认False,不改变原数据
    

    实例

    # 含有缺失值的列名
    # Revenue (Millions) 用均值填补    
    # Metascore
    data['Revenue(Millions)'].fillna(data['Revenue(Millions)'].mean(),inplace=True)
    data['Metascore'].fillna(data['Metascore'].mean(),inplace=True)
    
  2. 缺失值不是Nan

    2.1 替换

    # 缺失值类型为“?”
    data_new=data.replace(to_replace='?',value=np,nan)
    

    2.2 和上述一样

    data_new.dropna(inplace=True)
    

二、数据离散化

性别、物种之类的都用one-hot

什么是数据离散化?

答:将连续属性的值域上,将值域划分为若干个离散的区域,最后用不同的数值落在每个子区间的属性值

为什么进行数据离散化?

答:目的:简化数据结构

如何实现数据离散化?

  1. 分组

    • 自动分组 Sr=pd.qcut(data,nums)
    • 自定义分组 Sr=pd.cut(data,bins)
  2. 将分组好的结果转化为one-hot编码

    pd.get_dummies(Sr,prefix=‘’)

import pandas as pd
data=pd.Series([1,2,3,4,5,9,0],index=['x','y','c','v','b','n','m'])
#自动分组
Sr=pd.qcut(data,3)
pd.get_dummies(Sr,prefix='身高')
#自定义分组
bins=[0,2,5,10]
Sr=pd.cut(data,bins)
pd.get_dummies(Sr,prefix='height')

三、合并

  1. 按方向拼接

    pd.concat([data1,data2],axis=0) # 默认0,0为列索引,竖直拼接
    
  2. 按索引拼接

    pd.merge(left,right,how='inner',on=[])
    on:索引
    how: left、right、inner、outer
    inner:可以理解为交集,然后拼接(最多)
    outer:可以理解为并集,然后拼接
    left:以左表为主,左表有的全部保留下来,然后拼接右表
    right:以右表为主,右表有的全部保留下来,然后拼接左表
    

    实例

    left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                            'key2': ['K0', 'K1', 'K0', 'K1'],
                            'A': ['A0', 'A1', 'A2', 'A3'],
                            'B': ['B0', 'B1', 'B2', 'B3']})
    
    right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                            'key2': ['K0', 'K0', 'K0', 'K0'],
                            'C': ['C0', 'C1', 'C2', 'C3'],
                            'D': ['D0', 'D1', 'D2', 'D3']})
    result=pd.merge(left,right,how='inner',on=['key1','key2']) # 连接方式:内连接,连接键为key1,key2
    

四、交叉表与透视表

找到两个变量之间的关系

  • 1、交叉表

    # 股票涨跌幅与星期几是否有关
    pd.crosstab(value1,value2)
    

    实例

    # 1、准备星期数据列
    # 把index转换成DatatimeIndex
    # pandas 日期类型
    stock=pd.read_csv('./stock.csv')
    date=pd.to_datetime(stock.index)
    # date.weekday,date.year,date.month(加一列)
    stock['week']=date.weekday
    # 2、准备涨跌幅数据列
    stock['pona']=np.where(stock['p_change']>0,1,0)
    # 3、调用交叉表
    data=pd.crosstab(stock['week'],stock['pona']) # 得到的是频数
    sum1=data.sum(axis=1) # 按行求和
    data1=data.div(sum1,axis=0) # 按列求商, 得到交叉表
    # 4、绘图
    data1.plot(kind='bar') #两列
    data1.plot(kind='bar',stacked=True) #合并成一列
    
  • 2、透视表

    df.pivot_table([],index=[])
    data2=stock.pivot.table(['pona'],index=['week'])
    

    在这里插入图片描述

五、分组与聚合

分析数据的一种方式,通常和统计函数一起使用,查看数据分组情况

# 1、DataFrame分组与聚合
df.groupby(by='columns名')['聚合columns名'].max()
# 2、Series分组与聚合
col['聚合列名'].groupby(col['color']).max()

实例

col=col =pd.DataFrame({'color': ['white','red','green','red','green'], 'object': ['pen','pencil','pencil','ashtray','pen'],'price1':[5.56,4.20,1.30,0.56,2.75],'price2':[4.75,4.12,1.60,0.75,3.15]})
# 进行分组,对颜色分组,price1进行聚合
# 用dataframe的方法进行分组
col.groupby(by="color")["price1"].max()

# 或者用Series的方法进行分组聚合
col["price1"].groupby(col["color"]).max()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值