pandas 常用操作记录
apply函数
一个非常灵活的函数,能够对整个DataFrame或者Series执行给定函数的操作。
函数可以是自定义的,也可以是python或者pandas内置的函数,还可以是匿名函数。
作用: 用于数值转换, 或者添加新列的时候
模拟数据:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{"name":["xiaoming","sunjun","jimmy","tom"],
"sex":["male","female","female","male"],
"chinese":[100,80,90,92],
"math":[90,100,88,90]
})
df
例子:
1/ 转换某列的数值
df["chinese"] = df["chinese"].apply(float)
或者:
df['chinese'] = df['chinese'].astype(float)
2/ 性别列转换,将性别为male的改为0, female改为1
def change_sex(x): # male-0 female-1
return 0 if x == "male" else 1
df["sex"] = df["sex"].apply(change_sex)
或者用lambda函数
df['sex'] = df.apply(lambda x: 0 if x.sex == 'male' else 1, axis=1) # axis的意思代表从横向处理
3/ 用lambda函数将name首字母大写:
df["name"] = df["name"].apply(lambda x: x.title())
4/ 新增一列 求chinese和math的总分
df['score'] = df.apply(lambda x: x.chinese + x.math, axis=1) # 同时操作两列,记得axis=1
5/ 将某列的日期改变
import datetime
def change_day(x):
year = x.year - 100 if x.year > 1989 else x.year
return datetime.date(year, x.month, x.day)
wind['Yr_Mo_Dy'] = wind['Yr_Mo_Dy'].apply(change_day)
wind.head()
---
# 新增年月日列
wind['data'] = wind.Yr_Mo_Dy
wind['month'] = wind['data'].apply(lambda data: data.month)
wind['year'] = wind['data'].apply(lambda data: data.year)
wind['day'] = wind['data'].apply(lambda data: data.day)
agg函数:
agg函数一般和groupby函数一起使用
1/ 求chinese的平均分和sum
df["chinese"].agg(["mean", "sum"])
或者
op_dict = {'chinese': 'sum', 'chinese2':'mean'}
df['chinese2'] = df.chinese
df2 = df['chinese'].agg(op_dict).reset_index()
df2.columns = ['index',"score"]
df2
2/求男生和女生的ch的平均分和总分是多少
df['chinese2'] = df.chinese
op_dict = {'chinese': 'sum', 'chinese2':'mean'}
df2 = df.groupby('sex').agg(op_dict).reset_index() # reset_index用于将columns定为索引
df2
3/统计性别男女 sex 的chinese 的平均分(新增一个字段放在最后面)
op_dict = {'chinese': 'mean'}
df1 = df.groupby('sex').agg(op_dict).reset_index() # 先求出男女平均分,然后merge在一起
df1.columns = ["sex", "chi_average"]
df1
df.merge(df1,on='sex', how='left')
merge函数
作用: 多用于合并
用法:
1/ 将两个表合并
df_data = df_data.merge(node_events_detail_df, on=['device_id', 'day'], how='left').fillna(0) # df_data和node_events_detail_df合并 , 拼合字段为on ,how为left 左连接和outer外联,
fillna(0) 为如果是空值则补0
判断dateframe是否为空
if df_data.empty:
pivot_table函数
作用:透视表,将列转为行
参考具体用法
https://blog.csdn.net/mingkoukou/article/details/82870960
例子:
node_events_detail_df = node_events_detail_df[['device_id', 'pn', 'day', 'calculate_event_type_num']] # 排好需要用到的columns
# 透视表,需要选择到的columns=pn,新增一列calculate_event_type_num 其实就是改了名字的pn, 选取values的值 则为pn的值,fill_value 为默认值为0 aggfunc为遇到相同的pn 聚合函数或函数列表, 最后转为int
node_events_detail_df = node_events_detail_df.pivot_table(index=['biz_game_code', 'biz_gcp_code', 'device_id', 'day'],columns='pn',values='calculate_event_type_num', fill_value='0', aggfunc='sum').astype(int)
node_events_detail_df = node_events_detail_df.reset_index()
新增一列数据
chipo['new'] = chipo.apply(lambda x: x.item_price[1:-1] if x.item_price else 0, axis=1) # 切片去掉不能转为浮点数的数字
data_df['ip_name'] = data_df.apply(lambda x: self.get_ip_city(x.ip_name), axis=1)
data_df['ifa_type'] = data_df.apply(lambda x: self.get_ifa_type_name(x.ifa_type), axis=1)
data_df['newflag_g'] = data_df.apply(lambda x: '是' if x.newflag_g else '否', axis=1)
data_df['newflag_gcp'] = data_df.apply(lambda x: '是' if x.newflag_gcp else '否', axis=1)
iloc函数
作用:将df进行一个切割
df[:,:] # 前面控制的是多少行, 后面控制的是多少列, 从0开始算
参考具体用法
concat函数
作用: 将两个二维数组合并
用法:
import numpy as np
import pandas as pd
raw_data_1 = {
'subject_id': ['1', '2', '3', '4', '5'],
'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']}
raw_data_2 = {
'subject_id': ['4', '5', '6', '7', '8'],
'first_name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'last_name': ['Bonder', 'Black', 'Balwner', 'Brice', 'Btisan']}
raw_data_3 = {
'subject_id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
'test_id': [51, 15, 15, 61, 16, 14, 15, 1, 61, 16]}
data1 = pd.DataFrame(raw_data_1)
data2 = pd.DataFrame(raw_data_2)
data3 = pd.DataFrame(raw_data_3)
# data1和data2两个数据框按照行的维度进行合并,命名为all_data
all_data = pd.concat([data1, data2])
all_data
# data1和data2两个数据框按照列的维度进行合并,命名为all_data_col
all_data_col = pd.concat([data1, data2], axis=1)
all_data_col
# 按照subject_id的值对all_data和data3作合并
all_data
all_data.merge(data3, on=['subject_id'],how='left').fillna(0)
# 对data1和data2按照subject_id作连接
data1.merge(data2, on='subject_id', how='inner',suffixes=('_left', '_right'))
query函数的使用
作用: 对二维数组 数据进行查找使用
用法:
# 查找是columns为day的8月2号的数据且广告id为1的,然后相加
pay_df.query('ad_id==1 and user_day == "20220802"').sum()
pandas 常用操作记录的更多相关文章
- Hbase常用操作记录
Hbase常用操作记录 Hbase 创建表 查看表结构 修改表结构 删除表 创建表 语法:create <table>, {NAME => <family>, VERSI ...
- Mysql常用操作记录
在linux平台中相关的MySql操作 打开Mysql mysql -uroot -p //-u后边为用户名,-p后边为密码 1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql& ...
- 【Json】fastjson与jackson常用操作记录
本文只是记录fastjson.jackson一些常用的操作方法,没作比较,网上写比较的文章很多啦. 1.对象转Json串 // fastjson String objStr = JSON.toJSON ...
- 关于mac的一些常用操作记录
之前记录过一个关于mac远程连接window机,实现共享文件的记录,今天记录一些常用的操作,会持续更新. 1.谷歌浏览器 f12的操作 command+option+i 打开调试面板 2.打开指定位置 ...
- git常用操作记录
之前的多人项目大多使用了SVN作为版本控制,自己只会用eclipse连接GitHub的操作.这次项目采用了git作为版本控制系统,所以学会了很多新操作,这里权当记录,以备后用. git的一些基本操作可 ...
- 第二篇 Mysql常用操作记录(转载)
我们在创建网站的时候,一般需要用到数据库.考虑到安全性,建议使用非root用户.常用命令如下: 1.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户my ...
- 3-10 Pandas 常用操作
1.构造数据 In [1]: import pandas as pd data=pd.DataFrame({'group':['a','a','a','b','b','b','c','c','c' ...
- git -- 项目开发最常用操作记录
官方Git - Book https://git-scm.com/book/zh/v2 ------------------------------git配置以及公钥生成--------------- ...
- pandas常用操作详解(复制别人的)——数据透视表操作:pivot_table()
原文链接:https://www.cnblogs.com/Yanjy-OnlyOne/p/11195621.html 一文看懂pandas的透视表pivot_table 一.概述 1.1 什么是透视表 ...
- [skill][git] git 常用操作记录
傻瓜入门: step by step : https://try.github.io/levels/1/challenges/1 一本书: https://git-scm.com/book/en/v2 ...
随机推荐
- WSL安装Ubuntu 22.04 (1)
1. 安装WSL WSL是适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具.实用工具和应用程序 - 且不会产生传统虚拟机或双启动 ...
- Docker-界面化
docker-ui docker-ui只能便于我们查看系统的相关信息,镜像或者容器.在界面上做简单的处理,可处理单机版Docker. docker pull uifd/ui-for-docker do ...
- ACM需要知道的STL小技巧
天天用stl,但是有一些小技巧如果不知道,偶尔会导致TLE,这里说几个打比赛需要用到的. 主要是大概了解一下其底层原理:https://www.jianshu.com/p/834cc223bb57 就 ...
- ChatGPT 设计游戏剧情 | 基于 AI 5 天创建一个农场游戏,完结篇!
欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用 AI 工具在 5 天内创建一个功能完备的农场游戏.到本系列结束时,您将了解到如何将多种 AI 工具整合到游戏开发流程中.本文将向您展示如何将 A ...
- 支付回调MQ消息的幂等处理及MD5字符串es中的使用及支付宝预授权完成
支付回调MQ消息的幂等处理及MD5字符串es中的使用及支付宝预授权完成 1.幂等的处理,根据对象的转json 转md5作为key,退款的处理 控制发送端?业务上比较难控制.支付异步通知,退款有同步通知 ...
- SaaS、PaaS、IaaS区别
SaaS SaaS 越久,觉得它个庞大的领域 SaaS 收入的"长江流域". 传统软件像买房:什么都得自己买,价格昂贵,一般人用不起.SaaS模式就像是租赁预先装修好的共享公寓,拎 ...
- 网络计划技术——关键路线法(Python)
关键路径法是基于进度网络模型的方法,用网络图表示各项活动之间的相互关系,获得在一定工期.成本.资源约束条件下的最优进度安排.关键路径法源于美国杜邦公司对于项目管理控制成本.减少工期的研究.1959年, ...
- pysimplegui之进度表one_line_progress_meter
我们的代码中都有循环.'等待,看着文本窗口中滚动过去的计数器不是很快乐吗?一行代码如何获得一个进度表,其中包含有关您的代码的统计信息? one_line_progress_meter(title, c ...
- 2.自定义@Excel注解实现数据Excel形式导入导出
前言 这几天在学习如何使用自定义注解实现Excel格式数据导入导出,参考的还是若依框架里面的代码,由于是初学,所以照猫画虎呗,但是难受的是需要复制并根据自己项目修改作者自定义的工具类以及导入这些工具类 ...
- 全网最详细中英文ChatGPT-GPT-4示例文档-人工智能助手从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)
目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...