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 相关文章推荐
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
利用Python实现网络测试的脚本分享
May 26 Python
Python标准库sched模块使用指南
Jul 06 Python
浅谈Python中的zip()与*zip()函数详解
Feb 24 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
Mac 使用python3的matplot画图不显示的解决
Nov 23 Python
使用Rasterio读取栅格数据的实例讲解
Nov 26 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 Python
python pygame 愤怒的小鸟游戏示例代码
Feb 25 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
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
js实现文字截断功能
2016/09/14 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
python实现五子棋游戏
2019/06/18 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
Python如何计算语句执行时间
2019/11/22 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
商务英语专业应届毕业生求职信
2013/10/28 职场文书
电子商务专业求职信
2014/07/10 职场文书
在校生证明
2015/06/17 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书