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实现的各种排序算法代码
Mar 04 Python
python模块之StringIO使用示例
Apr 08 Python
Python查询IP地址归属完整代码
Jun 21 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
Python 函数基础知识汇总
Mar 09 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
tensorflow 打印内存中的变量方法
Jul 30 Python
python标记语句块使用方法总结
Aug 05 Python
django fernet fields字段加密实践详解
Aug 12 Python
Django项目中使用JWT的实现代码
Nov 04 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
图文详解matlab原始处理图像几何变换
Jul 09 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 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
8个PHP数组面试题
2015/06/23 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
Javascript 错误处理的几种方法
2009/06/13 Javascript
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
python装饰器使用方法实例
2013/11/21 Python
python3图片转换二进制存入mysql
2013/12/06 Python
Python之eval()函数危险性浅析
2014/07/03 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
Numpy中的mask的使用
2018/07/21 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
大学自主招生自荐信范文
2014/02/26 职场文书
交通事故私了协议书
2014/04/16 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
产品调价通知函
2015/04/20 职场文书
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang