pandas高级操作

1.替换操作

  • 替换操作可以同步作用于Series和DataFrame中

  • 单值替换

    • 普通替换;替换所有符合要求的元素
    • 按照指定单值替换:to_replace={列标签:替换值} value='新值'
  • 多值替换

    • 列表替换:to_replace=[],value=[]
    • 字典替换:(推荐) to_replace={ro_replace:value,to_replace:value}
    df=DataFrame(data=np.random.randint(0,100,size=(5,6)))
    #根据值替换
    #to_replace:原值
    #value:新值
    df.replace(to_replace=2,value='Two')
    
    #用字典的方式将3替换为three
    df.replace(to_replace={3:'three'})
    
    #根据位置替换
    #将指定列的元素进行替换to_replace={列索引:被替换的值}
    #将第四列中62的值换成five
    df.replace(to_replace={4:62},value='five')
    

2.映射操作

2.1 map

  • 注意:map是Series的方法,只能被Series调用

  • 概念:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素值提供不同的表达方式)

    #创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名
    dic={
        'name':['张三','李四','张三'],
        'salary':[15000,20000,15000]
    }
    df=DataFrame(data=dic)
    df
    #映射关系表
    dic1={
        '张三':'tom',
        '李四':'jack'
    }
    df['e_name']=df['name'].map(dic)
    
  • 当运算工具

    # 超过3000部分的钱缴纳50%的税,计算每个人的税后薪资
    dic={
        'name':['张三','李四','张三'],
        'salary':[15000,20000,15000]
    }
    def after_sal(s):
        if s>3000:
            s=s-(s-3000)*0.5
        return s
    #获取映射结果将结果添加到df中
    #map(自定义函数)
    #将salary这个Series中每一个元素作为参数传递给s,salary有几个元素,就调用几次
    df['after_sal']=df['salary'].map(after_sal)
    
  • lambda表达式操作

    data['href'].map(lambda x:True if x in [1,2,3] else False)
    

2.2.apply 和 applymap

  • apply:
    • 参数是一列(axis=0)或一行(axis=1)的数据
    • 作用行或列的元素是DataFrame的运算工具
      def get_field(a):
        index,content_list=a
      data.loc[:,['index','novel_content_list']].apply(get_field,axis=1)  # axis=1行
      
  • applymap,作用到每个元素 【每个元素都会执行get_field函数】
    def get_field(a):
        print(a)
    data.loc[:2,['index','novel_content']].applymap(get_field)
    

3.排序实现的随机抽样

  • take()

  • np.random.permutation()

    df=DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B','C'])
    #随机生成乱序的随机序列
    np.random.permutation(10)
    #将原始数据打乱
    #行列都打乱,,take只支持隐式索引打乱
    df.take(np.random.permutation(3),axis=1).take(np.random.permutation(100),axis=0)
    

4.数据的分类处理

  • groupby()函数

  • groups属性查看分组情况

    df = DataFrame({
        'item':['Apple','Banana','Orange','Banana','Orange','Apple'],
        'price':[4,3,3,2.5,4,2],
        'color':['red','yellow','yellow','green','green','green'],
        'weight':[12,20,50,30,20,44]
    })
    
    #根据item分组,水果种类进行分析
    df.groupby(by='item') #<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000022A81B5E820>
    # 分组后筛选值
    df.groupby(by='item') .get_group(("price",30000))
    #查看分组详情
    df.groupby(by='item').groups
    
  • 分组聚合

    #分组聚合
    #根据种类分组,取价格求均值
    # ,as_index=False,不使用item为列索引
    df.groupby(by='item',as_index=False)['price'].mean()
    #根据颜色分组,求重量的均值,转为字典
    dic=df.groupby(by='color')['weight'].mean().to_dict()
    #将重量的均值在df中新增一列添加进去
    df['mean_w']=df['color'].map(dic)
    

5.高级数据聚合

  • 使用groupby分组后,也可以使用transformapply提供自定义函数实现更多的运算

  • df.groupby('item')['price'].sum()<==>df.groupby('item')['price'].apply(sum)

  • transformapply都会进行运算,在transform或者apply中传入函数即可

  • transformapply也可以传入一个lambda表达式

  • agg(),分组后进行多种不同的聚合操作

    df = DataFrame({
        'item':['Apple','Banana','Orange','Banana','Orange','Apple'],
        'price':[4,3,3,2.5,4,2],
        'color':['red','yellow','yellow','green','green','green'],
        'weight':[12,20,50,30,20,44]
    })
    #求均值
    def my_mean(s):
        m_sum=0
        for i in s:
            m_sum+=i
        return m_sum/len(s)
    #自定义函数
    df.groupby(by='item')['price'].transform(my_mean)
    #返回经过映射的结果,直接可以映射
    df.groupby(by='item')['price'].transform(my_mean)
    #返回的不是进过映射的结果
    df.groupby(by='item')['price'].apply(my_mean)
    df.groupby('district')['salary'].agg(['min','max','mean'])
    

6.透视表

  • 概念

    • 透视表是一种可以对数据动态排布并且分类汇总的表格格式,pivot_table
  • 优点

    • 灵活性高,可以随意定制分析计算要求
    • 脉络清晰易于理解数据
    • 操作性强,报表神器
  • 重要参数

    • index:分类汇总的条件
      • 每一个pivot_table必须拥有一个index
    • values:需要对计算的数据进行筛选
    • columns:设置列层次字段
      • 对values字段再进行分类
    • aggfunc:设置对数据聚合时进行的函数操作
      • 当我们未设置aggfunc时,他默认aggfunc='mean’计算均值
    df=pd.read_csv('./data/透视表-篮球赛.csv',encoding='utf8')
    #index:分类
    #values:筛选数据筛选
    #aggfunc:运算方式
    #分类条件,在index中,列索引,筛选列值索引,筛选之后进行求和
    df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'],aggfunc='sum')
    #columns:进行二次分类
    #fill_value:无数据填0
    # 根据主客场再分对手进行求和
    df.pivot_table(index='主客场',values='得分',columns='对手',aggfunc='sum',fill_value=0)
    

7.交叉表

  • 是一种用于计算分组的特殊透视图,对数据进行汇总
  • pd.crosstab(index,columns)
    • index:分组数据,交叉表的行索引
    • columns:交叉表的列索引
df = DataFrame({
    'sex':['man','man','women','women','man','women','man','women','women'],
    'age':[15,23,25,17,35,57,24,31,22],
    'smoke':[True,False,False,True,True,False,False,True,False],
     'height':[168,179,181,166,173,178,188,190,160]
})
#求出各个性别抽烟的人数
#根据smoke,sex,进行汇总,smoke为列,sex为行,默认计数
pd.crosstab(df.smoke,df.sex)
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
Pandas提供了许多高级应用和功能,使得数据分析和处理更加便捷和高效。以下是一些常见的Pandas高级应用: 1. 数据清洗:Pandas提供了一系列的函数和方法来处理缺失值、重复值、异常值等数据清洗任务。例如,使用dropna()函数删除包含缺失值的行或列,使用fillna()函数填充缺失值,使用drop_duplicates()函数删除重复值等。 2. 数据转换:Pandas提供了一系列的函数和方法来对数据进行转换和重塑。例如,使用apply()函数对数据进行自定义函数的应用,使用map()函数对Series数据进行映射转换,使用pivot()函数进行数据透视操作等。 3. 数据合并:Pandas提供了多种方式来合并数据集。使用concat()函数可以按照指定的轴将多个数据集进行垂直或水平堆叠;使用merge()函数可以基于一个或多个键将多个数据集进行数据库风格的合并操作。 4. 分组和聚合:Pandas提供了强大的分组和聚合功能,使得对数据进行分组统计变得非常简单。使用groupby()函数可以按照指定的列或条件将数据分组,并对每个组应用聚合函数(如sum、mean、count等)进行统计。 5. 时间序列分析:Pandas对于时间序列数据的处理非常强大。它提供了一系列的函数和方法来处理时间序列数据,例如通过resample()函数进行重采样,使用rolling()函数进行滚动计算等。 6. 数据可视化:Pandas可以与Matplotlib等绘图库集成使用,实现数据可视化。使用Pandas提供的plot()函数可以直接对数据进行绘图,例如绘制折线图、柱状图、散点图等。 这些只是Pandas的一部分高级应用,Pandas还有更多功能和方法可以满足各种数据分析和处理需求。详细的使用方法和示例可以参考Pandas官方文档和各种在线教程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荼靡~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值