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绘制双柱形图代码实例
Dec 14 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
Python sorted函数详解(高级篇)
Sep 18 Python
python得到单词模式的示例
Oct 15 Python
Python中正则表达式的用法总结
Feb 22 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
python实现while循环打印星星的四种形状
Nov 23 Python
python实现3D地图可视化
Mar 25 Python
基于Python爬取素材网站音频文件
Oct 21 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 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
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
简单实现PHP留言板功能
2016/12/21 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
使用javascipt---实现二分查找法
2013/04/10 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
Python 的类、继承和多态详解
2017/07/16 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
python爬取网易云音乐评论
2018/11/16 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
python通过链接抓取网站详解
2019/11/20 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
业务员的岗位职责
2014/03/15 职场文书
怀念母亲教学反思
2014/04/28 职场文书
企业宣传标语
2014/06/09 职场文书
小学生成绩单评语
2014/12/31 职场文书
求职意向书范本
2015/05/11 职场文书
追悼词范文大全
2015/06/23 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
python如何查找列表中元素的位置
2022/05/30 Python