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使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
深入理解Python装饰器
Jul 27 Python
python正则表达式re之compile函数解析
Oct 25 Python
对pandas里的loc并列条件索引的实例讲解
Nov 15 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
numpy.array 操作使用简单总结
Nov 08 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
基于python实现获取网页图片过程解析
May 11 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 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 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
禁止IE用右键的JS代码
2013/12/30 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
vue实现模态框的通用写法推荐
2018/02/26 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
python验证码识别实例代码
2018/02/03 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
python pygame实现2048游戏
2018/11/20 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
python实现IOU计算案例
2020/04/12 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
浅析Python requests 模块
2020/10/09 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
2014年自我评价
2014/01/04 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
道歉的话怎么说
2015/05/12 职场文书
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers