13个Pandas实用技巧,助你提高开发效率


Posted in Python onAugust 19, 2020

原作:风控猎人

整理:数据管道

归纳整理了一些工作中常用到的pandas使用技巧,方便更高效地实现数据分析。

1.计算变量缺失率

df=pd.read_csv('titanic_train.csv')
def missing_cal(df):
  """
  df :数据集
  
  return:每个变量的缺失率
  """
  missing_series = df.isnull().sum()/df.shape[0]
  missing_df = pd.DataFrame(missing_series).reset_index()
  missing_df = missing_df.rename(columns={'index':'col',
                      0:'missing_pct'})
  missing_df = missing_df.sort_values('missing_pct',ascending=False).reset_index(drop=True)
  return missing_df
missing_cal(df)

如果需要计算样本的缺失率分布,只要加上参数axis=1.

2.获取分组里最大值所在的行方法

分为分组中有重复值和无重复值两种。无重复值的情况。

df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]})
df

df.iloc[df.groupby(['Mt']).apply(lambda x: x['Count'].idxmax())]

先按Mt列进行分组,然后对分组之后的数据框使用idxmax函数取出Count最大值所在的列,再用iloc位置索引将行取出。有重复值的情况

df["rank"] = df.groupby("ID")["score"].rank(method="min", ascending=False).astype(np.int64)
df[df["rank"] == 1][["ID", "class"]]

对ID进行分组之后再对分数应用rank函数,分数相同的情况会赋予相同的排名,然后取出排名为1的数据。

3.多列合并为一行

df = pd.DataFrame({'id_part':['a','b','c','d'], 'pred':[0.1,0.2,0.3,0.4], 'pred_class':['women','man','cat','dog'], 'v_id':['d1','d2','d3','d1']})

df.groupby(['v_id']).agg({'pred_class': [', '.join],'pred': lambda x: list(x),
'id_part': 'first'}).reset_index()

4.删除包含特定字符串所在的行

df = pd.DataFrame({'a':[1,2,3,4], 'b':['s1', 'exp_s2', 's3','exps4'], 'c':[5,6,7,8], 'd':[3,2,5,10]})
df[df['b'].str.contains('exp')]

5.组内排序

df = pd.DataFrame([['A',1],['A',3],['A',2],['B',5],['B',9]], columns = ['name','score'])

介绍两种高效地组内排序的方法。

df.sort_values(['name','score'], ascending = [True,False])
df.groupby('name').apply(lambda x: x.sort_values('score', ascending=False)).reset_index(drop=True)

6.选择特定类型的列

drinks = pd.read_csv('data/drinks.csv')
# 选择所有数值型的列
drinks.select_dtypes(include=['number']).head()
# 选择所有字符型的列
drinks.select_dtypes(include=['object']).head()
drinks.select_dtypes(include=['number','object','category','datetime']).head()
# 用 exclude 关键字排除指定的数据类型
drinks.select_dtypes(exclude=['number']).head()

7.字符串转换为数值

df = pd.DataFrame({'列1':['1.1','2.2','3.3'],
         '列2':['4.4','5.5','6.6'],
         '列3':['7.7','8.8','-']})
df
df.astype({'列1':'float','列2':'float'}).dtypes

用这种方式转换第三列会出错,因为这列里包含一个代表 0 的下划线,pandas 无法自动判断这个下划线。为了解决这个问题,可以使用 to_numeric() 函数来处理第三列,让 pandas 把任意无效输入转为 NaN。

df = df.apply(pd.to_numeric, errors='coerce').fillna(0)

8.优化 DataFrame 对内存的占用

方法一:只读取切实所需的列,使用usecols参数

cols = ['beer_servings','continent']
small_drinks = pd.read_csv('data/drinks.csv', usecols=cols)

方法二:把包含类别型数据的 object 列转换为 Category 数据类型,通过指定 dtype 参数实现。

dtypes ={'continent':'category'}
smaller_drinks = pd.read_csv('data/drinks.csv',usecols=cols, dtype=dtypes)

9.根据最大的类别筛选 DataFrame

movies = pd.read_csv('data/imdb_1000.csv')
counts = movies.genre.value_counts()
movies[movies.genre.isin(counts.nlargest(3).index)].head()

10.把字符串分割为多列

df = pd.DataFrame({'姓名':['张 三','李 四','王 五'],
          '所在地':['北京-东城区','上海-黄浦区','广州-白云区']})
df
df.姓名.str.split(' ', expand=True)

11.把 Series 里的列表转换为 DataFrame

df = pd.DataFrame({'列1':['a','b','c'],'列2':[[10,20], [20,30], [30,40]]})
df

df_new = df.列2.apply(pd.Series)
pd.concat([df,df_new], axis='columns')

12.用多个函数聚合

orders = pd.read_csv('data/chipotle.tsv', sep='\t')
orders.groupby('order_id').item_price.agg(['sum','count']).head()

13.分组聚合

import pandas as pd
df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],
  'key2':['one', 'two', 'one', 'two', 'one'],
  'data1':np.random.randn(5),
   'data2':np.random.randn(5)})
df

for name, group in df.groupby('key1'):
  print(name)
  print(group)

dict(list(df.groupby('key1')))

通过字典或Series进行分组

people = pd.DataFrame(np.random.randn(5, 5),
   columns=['a', 'b', 'c', 'd', 'e'],
   index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
mapping = {'a':'red', 'b':'red', 'c':'blue',
   'd':'blue', 'e':'red', 'f':'orange'}
by_column = people.groupby(mapping, axis=1)
by_column.sum()

以上就是13个Pandas实用技巧,助你提高开发效率的详细内容,更多关于Pandas实用技巧的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
python通过文件头判断文件类型
Oct 30 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
python实现在线翻译功能
Mar 03 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
Python txt文件常用读写操作代码实例
Aug 03 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
python实现进度条的多种实现
Apr 29 Python
Pandas-DataFrame知识点汇总
Mar 16 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 #Python
Python实现自动签到脚本的示例代码
Aug 19 #Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
Aug 19 #Python
Python容器类型公共方法总结
Aug 19 #Python
python3将变量输入的简单实例
Aug 19 #Python
手把手教你将Flask应用封装成Docker服务的实现
Aug 19 #Python
python实现每天自动签到领积分的示例代码
Aug 18 #Python
You might like
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
Javascript中的变量使用说明
2010/05/18 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
原生js二级联动效果
2017/06/20 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
销售经理工作职责
2014/02/03 职场文书
个性车贴标语
2014/06/24 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis