当前位置: 首页 > 编程日记 > 正文

12 个 Pandas 数据处理高频操作

f2dad3c2f6ba659fccc6e6d68e3b433d.gif

作者 | 老表

来源 | 简说Python

今天给大家分享几个自己近期常用的Pandas数据处理技巧,主打实用,所以你肯定能用的着,建议扫一遍,然后收藏起来,下次要用的时候再查查看即可。

  • 简单说说

  • 总结分享

  1. 统计一行/一列数据的负数出现的次数

  2. 让dataframe里面的正数全部变为0

  3. 统计某列中各元素出现次数

  4. 修改表头和索引

  5. 修改列所在位置insert+pop

  6. 常用查询方法query

  7. 数据存储时不要索引

  8. 按指定列排序sort_values

  9. apply 函数运用

  10. Pandas数据合并

  11. Pandas Dataframe拷贝

  12. 对于列/行的操作

简单说说

Panda是一个快速、强大、灵活且易于使用的开源数据分析和操作工具,在Python环境下,我们可以通过pip直接进行安装。

pip install pandas

在Python代码中使用pandas首先需要导入:

import pandas as pd

创建一个示例数据:

# 统计一行/一列数据的负数出现的次数
df = pd.DataFrame({'a':[1,-3,0,1,3],'b':[-1,0,1,5,1],'c':[0,-2,0,-9,0]})
df
9b492099438cfec84b039f0ea82e69b8.png

总结分享

> 1 统计一行/一列数据的负数出现的次数

# 获取到每一行的复数个数
# 要获取列的话,将axis改成0即可
num_list = (df < 0).astype(int).sum(axis=1)
num_list

6cb3819ebf798d51a365d6b251f3ed97.png

> 2 让dataframe里面的正数全部变为0

# 直接了当
df[df>0] = 0
df

f7d6823d45137e7d8817ddecc23e71ea.png

> 3 统计某列中各元素出现次数

  • 默认情况,直接统计出指定列各元素值出现的次数。

# 默认情况,统计b列各元素出现次数
df['b'].value_counts()

1e80f84937a6e5d3778aa2a05bf88e58.png

  • 最好奇的bins参数,按bins分割区间,统计落在各区间内元素个数

# 按指定区间个数bin,元素起始值分割区间,统计表格中落在各区间内元素个数
df['b'].value_counts(bins=3)

5994cc92d101a5f60fff2d818806999c.png

  • normalize参数,计算各元素出现次数占比

# normalize参数 出现次数/总数据个数 
df['b'].value_counts(normalize=True)

8f143d77cc423ba57150465f921f400c.png

还有sort和ascending,可以按指定方式对统计结果进行排序。

> 4 修改表头和索引

  • 修改表头名称

# 修改表头名称
columns = {'a': 'A', 'b': 'B'}
df.rename(columns=columns, inplace=True)
df

ad158f12b2cb35e9aca1320ec3bdfcb9.png

  • 设置特殊索引

# 设置特殊索引
df.index = ['a', 'b', 'c', 'd', 'e']
df

aed766ea89a8927a9fd0e1541c33df9e.png

  • 删除索引

# 删除索引
df.reset_index(drop=True, inplace=True)
df

9fcc6b06911cb321c7362d9616ba4fa5.png

> 5 修改列所在位置insert+pop

insert在指定位置插入某列值;pop按列名取出某列(同时会删掉该列)。

# 将A列移到最后
# 新增列位置,新增列名,新增列的数值
df.insert(2,'A',df.pop('A'))
df

2e687c203b43ae6f8e87ea4b293ef3ed.png

> 6 常用查询方法query

  • 直接查询

# 找出c所有c值小于0的行
df.query("c<0")

cd8fc7d858568ff743d38ba372e52794.png

  • query+contains模糊查询

# 插入一列
df.insert(0,'name',['张三', '张华', '李四', '王五', '李逵'])
# 查找名字里包含三、四、五的用户数据
df.query("name.str.contains('三|四|五')", engine='python')

fa4b72166cd0f75c11418bdadf26f65b.png

> 7 数据存储时不要索引

设置index为None即可。

df.to_csv('测试数据.csv', encoding='utf-8-sig', index=None)

174e35490a634e0734a340ee6c7850c0.png

> 8 按指定列排序sort_values

sort_values函数,通过by参数可以指定按哪些列进行排序,还可以设置ascending指定排序方式(升序或者降序,默认降序)

# by 指定排序列 na_position nan值放的位置 开头还是尾部
df.sort_values(by=['name'],na_position='first')

087de7e77d72b620e602880f6daef6f5.png

> 9 apply 函数运用

# A B 两列都每个元素值都+1
df[['A', 'B']].apply(lambda x:x+1)

5727c1f91abb3c779f8bfc069b6735b7.png4513b2af831ecfcef5b5ec83602f8b03.png

DataFrame.apply(func, 
axis=0, broadcast=False, 
raw=False, reduce=None, args=(), **kwds)

> 10 Pandas数据合并

进行数据合并前,首先需要确定合并的数据的表头都是一致的,然后将他们依次加入一个列表,最终使用concat函数即可进行数据合并。

# 现将表构成list,然后再作为concat的输入
df1 = df[0:1]
df2 = df[2:4]
df3 = df[3:5]
frames = [df1, df2, df3]
df4 = pd.concat(frames)
df4

94747fe6b558365bf2ba0fb8ceb55ad6.png

> 11 Pandas Dataframe拷贝

  • 深拷贝,df1改变,df不会变

# 深拷贝,df1改变,df不会变
df1 = df.copy(deep=True)
print(f"df\n{df}\ndf1\n{df1}")

2548fcff279cae52f53695648a28a30b.png

  • 将原数据df的name列的第一个元素改为zs,会发现,df改动,不会影响df1。

df['name'][0] = 'zs'
print(f"df\n{df}\ndf1\n{df1}")

fddd0df15ce804893fe14f424c026e61.png

  • 浅拷贝,df2改变,df也会变  等同df2 = df

# 浅拷贝,df2改变,df也会变  等同df2 = df
df2 = df.copy(deep=False)
print(f"df\n{df}\ndf2\n{df2}")
  • 将原数据df的name列的第一个元素改为张三,会发现,df改动,df2也会一起改动。

df['name'][0] = '张三'
print(f"df\n{df}\ndf2\n{df2}")

b841378eb118bbb89e50bfa80bc7ce1e.png

> 12 对于列/行的操作

  • 删除指定行/列

# 行索引/列索引 多行/多列可以用列表
# axis=0表示行 axis=1表示列 inplace是否在原列表操作 
# 删除df中的c列
df.drop('c', axis=1, inplace=True)
df

40ea60d07636706aa7052e285542b1d8.png

  • 取出指定列/行

# 不知道列名,取出表格最后两列
df3 = df.iloc[:, -2:]  
# 知道列名,取出name和A两列
df4 = df.loc[:, ['name', 'A']]  
print(f"df3\n{df3}\ndf4\n{df4}")

1b25a4788a31464708c159523e4f9668.png

# 重新设置下索引
df.index = ['a1', 'a2', 'a3', 'a4', 'a5']# 不知道行索引,取出表格前两行
df5 = df.iloc[:2, :]  
# 知道行索引,取出a1和a3两行
df6 = df.loc[['a1', 'a3'], :]  
print(f"df5\n{df5}\ndf6\n{df6}")

4ea579374eeeb01217c33cf209cbb2d2.png

  • 交换两列指定值

# 将B列中小于0的元素和A列交换
# 筛选出B列中小于0的行
flag = df['B'].astype(int).map(lambda x: x<0)
# 通过布尔提取交换两列数据
df.loc[flag, 'B'], df.loc[flag, 'A'] = df.loc[flag, 'A'], df.loc[flag, 'B']
df

5270e080e000064aec31451c84939705.png

好啦,今天的分享就到这里啦,下会有新的积累,再分享给大家,也欢迎大家留言区留言说说你平时pandas用的比较多的操作呀~互相学习,才能一起进步,更快的进步。

27c4a6b6f4e631fc71219eadac78489a.gif

d57b6d34fd9da9b34de9a7a0abfb569b.png

技术

Python实现一个电影订票系统

技术

用Python实现十大经典排序算法

技术

快速实现Resnet残差模型实战

资讯

隐患:神经网络可以隐藏恶意软件

263654ab394d288e59e6a42babe870d6.png

分享

adf201c5070c3cd7692ecc8a69a87ddc.png

点收藏

d517238cba4bc0d369af09c187f57400.png

点点赞

6a6215db5e8c4d6848f7e0d9c9b7fe0c.png

点在看

相关文章:

ORACLE初次安装自动安装软件包

一、自动安装所需软件包提前配置好yum仓库定义package.txt包列表文件&#xff1a;以官网RHEL6为例&#xff0c;这里有compat-libstdc有两个包&#xff0c;如果不加*&#xff0c;号后面的compat-libstdc-33-3.2.3-69.el6.x86_64&#xff0c;compat-libstdc-296-2.96-144.el6.i68…

中文详解phpmailer所有对象和属性

2019独角兽企业重金招聘Python工程师标准>>> 2009-03-09 19:13:50 前言&#xff1a; phpmailer是一个优秀的发件程序&#xff0c;但中文资料比较少&#xff0c;于是有牛人手动翻译了phpmailer的elementindex.html,E文的&#xff1a;[url]http://www.bblog.com/api…

php error_reporting 详解

error_reporting设定错误讯息回报的等级。语法: int error_reporting(int [level]);传回值: 整数函式种类: PHP 系统功能内容说明 本函式用来设定错误讯息回报的等级&#xff0c;参数 level 是一个整数的位元遮罩 (bitmask)&#xff0c;见下表。value constant 1 E_ERROR 2 E_W…

mysql多个实例

2019独角兽企业重金招聘Python工程师标准>>> 1>、关闭原有的默认端口3306的mysql:service mysqd stop 2>、拷贝或创建数据文件 cp -r /data/mysql/data1 /data/mysql/data_3307 格式 用bin/mysql_install_db --basedirmysql的目录 --datadir数据存放的目录 …

10行 python 代码做出哪些酷炫的事情?

来源 | Python小二Python凭借其简洁的代码&#xff0c;赢得了许多开发者的喜爱。因此也就促使了更多开发者用Python开发新的模块&#xff0c;从而形成良性循环&#xff0c;Python可以凭借更加简短的代码实现许多有趣的操作。下面我们来看看&#xff0c;我们用不超过10行代码能实…

这是一个不一样的社会公益活动

公益不是每个人的刚需&#xff0c;但是可以&#xff0c;以全链条模式联动更多人需求。 社会公益就是给社会带来帮助的事或物&#xff0c;它包含社区服务&#xff0c;环境保护&#xff0c;知识传播&#xff0c;公共福利&#xff0c;帮助他人&#xff0c;社会援助&#xff0c;社会…

剖析PHP中的输出缓冲

剖析PHP中的输出缓冲 本文按署名非商业用途保持一致授权作者: &#xff0c;发表于2005年12月24日01时54分 我们先来看一段代码。<?php for ($i10; $i>0; $i--) {echo $i;flush();sleep(1); } ?>按照php手册里的说法该函数将当前为止程序的所有输出发送到用户的浏览…

luasocket 安装记录 (FS1.6)

说明&#xff1a; 想通过Lua 脚本实现 http。默认 FS 的 mod_lua 中没有对socket 的支持&#xff0c;如下的操作为lua 添加 socket的支持。 一、下载 luasocket 包&#xff1a; # wget http://luaforge.net/frs/download.php/2664/luasocket-2.0.2.tar.gz # tar zxvf luaso…

5个实用的例子,一行 Python 能干嘛?

作者 | 菜鸟哥来源 | 菜鸟学Python一行Python到底能干嘛&#xff0c;今天给大家分享几个不错的小例子&#xff0c;都是在实际工作中经常会碰到的例子&#xff0c;让你知道一行代码的威力&#xff0c;让菜鸟也能秒变王者&#xff0c;尤其是能镇住新来的学妹。01、如果你是HR你手…

ASP.NET Web Forms - 网站导航(Sitemap 文件)

【参考】ASP.NET Web Forms - 导航 ASP.NET 带有内建的导航控件。 网站导航 维护大型网站的菜单是困难而且费时的。 在 ASP.NET 中&#xff0c;菜单可存储在文件中&#xff0c;这样易于维护。文件通常名为 web.sitemap&#xff0c;并且被存放在网站的根目录下。 此外&#xff0…

14 款命令行常用工具的替代品!

作者 | JackTian来源 | 杰哥的IT之旅在 Linux 操作系统下&#xff0c;ls (list) 可以说是我们日常使用率较高的命令了&#xff0c;它主要用来显示目标列表&#xff0c;输出信息可以进行彩色加亮显示&#xff0c;以分区不同类型的文件。关于 ls[1] 的语法、选项、实例、扩展知识…

C#编码实践:使用委托和特性调用指定函数

2019独角兽企业重金招聘Python工程师标准>>> 建立一个C#控制台应用程序AttributeTest。 建立一个类Operations&#xff0c;代码如下&#xff1a; namespace AttributeTest {public class Operations{public static int Add(int a, int b) { return a b; }public st…

HTTP响应头不缓存

Cache-Control:nocache Pragma:no-cache Expires&#xff1a;-1 <meta http-equivCache-Control content-1/>

CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS

一、预处理器 1、介绍 基于CSS的另一种语言、通过工具编译成CSS、添加了很多CSS不具备的特性、能提升CSS文件的组织 2、less嵌套 3 、sass嵌套 4、 less变量 5、sass变量 6、less mixin 7、sass mixin 8、less extend 9、sass extend 10、less loop 11、sass loop 12、less imp…

用了这么久的 Python,居然没注意到这个操作

作者 | luanhz来源 | 小数志导读Python语言近年来的火热程度自不必说&#xff0c;这一方面得益于其庞大的第三方库的加持&#xff0c;使得其堪称万金油般的存在&#xff1b;另一方面也在于其简洁的语法和易用的函数。是的&#xff0c;Python语法之简洁和函数之丰富&#xff0c;…

apache的keepalive和keepalivetimeout(apache优化)

在APACHE的httpd.conf中&#xff0c;KeepAlive指的是保持连接活跃&#xff0c;类似于Mysql的永久连接。换一句话说&#xff0c;如果将KeepAlive设置为On&#xff0c;那么来自同一客户端的请求就不需要再一次连接&#xff0c;避免每次请求都要新建一个连接而加重服务器的负担。 …

讨论JDK的File.equal()

我们一般比较两个文件中的对象是相同的文件&#xff0c;通常使用java.io.File.equal()。这里&#xff0c;equal()是不是文件内容的比较结果为。象是否指向同一个文件。File的equal()方法。实际上调用了当前文件系统FileSystem的compareTo()。public boolean equals(Object obj)…

百度云满速下载(转)

BaiduPCS-GO下载完毕后可以存放到任何位置&#xff0c;建议存放到无中文目录内。然后打开我的电脑→属性→高级系统设置→环境变量→系统变量→Path→编辑→新建&#xff0c;输入你的BaiduPCS-Go存放目录。注意&#xff1a;是存放目录。 这样CMD才可以正确识别到程序。做好所有…

内容协商 (Content Negotiation)

大多数响应包含一个实体&#xff0c;此实体包含人类用户能理解的信息。通常&#xff0c;希望提供给用户相应于请求最容易得到的实体。对服务器和缓存来说&#xff0c;不幸的是&#xff0c;并不是所有的用户都对这个最容易得到的实体有喜好&#xff0c;并且并不是所有的用户代理…

[经验]无线鼠标和无线键盘真的不能用了?——雷柏的重生之路~

逆天大二的时候托朋友买了个雷柏的无线键盘鼠标&#xff1a; 用了很多年&#xff0c;不仅外观好而且键盘鼠标本身也很好用&#xff0c;可前些日子就光荣牺牲了。。。。 逆天百思不得其"姐"&#xff0c;试着把电池换了&#xff0c;发现还是不行&#xff0c;&#xff0…

数字化探索:建立学习型组织,HR 也能驱动业务营收?

本篇文章暨 CSDN《中国 101 计划》系列数字化转型场景之一。 《中国 101 计划——探索企业数字化发展新生态》为 CSDN 联合《新程序员》、GitCode.net 开源代码仓共同策划推出的系列活动&#xff0c;寻访一百零一个数字化转型场景&#xff0c;聚合呈现并开通评选通道&#xff0…

26期20180716 iptables规则备份恢复 firewalld zone

7月16日任务10.19 iptables规则备份和恢复10.20 firewalld的9个zone10.21 firewalld关于zone的操作10.22 firewalld关于service的操作iptables的规则备份和恢复service iptables save会把配置保存到配置文件中 /etc/sysconfig/iptables如果不想保存在这 可以使用iptables-save …

一口气用 Python 写了13个小游戏,摸鱼达人!

来源 | Python小二1、吃金币源码分享&#xff1a;import os import cfg import sys import pygame import random from modules import *游戏初始化 def initGame():# 初始化pygame, 设置展示窗口pygame.init()screen pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.…

关于URL编码

参考&#xff1a;前端工程师的编码遭遇战http://ued.taobao.com/blog/2011/08/26/encode-war/細 談 URL 編碼关于URL编码作者&#xff1a; 阮一峰日期&#xff1a; 2010年2月11日一、问题的由来URL就是网址&#xff0c;只要上网&#xff0c;就一定会用到。一般来说&#xff0c;…

【设计模式】享元模式

上周代码评审&#xff0c;看到同事使用了“享元模式”。想起自己也不懂&#xff0c;着手学习之。 参考的优秀的文章&#xff1a; Java的享元模式 这篇博文为学习之理解、感悟&#xff0c;如理解不真确&#xff0c;请慷慨指出。 本文只讨论单纯享元模式。 Flyweight&#xff0c;…

用D3.js 十分钟实现字符跳动效果

用D3.js 十分钟实现字符跳动效果 注 本文基于 D3.js 作者 Mike Bostock 的 例子原文分为三部分, 在这里笔者将其整合为了一篇方便阅读. 该效果基于 D3.js, 主要使用到了 d3-selection. 如果对d3-selection的基本使用逻辑不太清楚可以参见 这篇文章. 效果图 Step1 首先代码会随机…

HTTP中的缓存

HTTP典型应用于能通过采用缓存技术而提高性能的分布式信息系统。HTTP/1.1协议包括的许多使缓存尽可能的工作的元素。因为这些元素与协议的其他方面有着千丝万缕的联系&#xff0c;而且他们相互作用、影响&#xff0c;因此有必要单独的来介绍基本的缓存设计。如果缓存不能改善性…

Pandas 多层级索引的数据分析案例,超干货!

作者 | 俊欣来源 | 关于数据分析与可视化今天我们来聊一下Pandas当中的数据集中带有多重索引的数据分析实战通常我们接触比较多的是单层索引&#xff08;左图&#xff09;&#xff0c;而多级索引也就意味着数据集当中的行索引有多个层级&#xff08;右图&#xff09;&#xff0…

Angular - - $sce 和 $sceDelegate

$sce $sce 服务是AngularJs提供的一种严格上下文转义服务。 严格的上下文转义服务 严格的上下文转义(SCE)是一种需要在一定的语境中导致AngularJS绑定值被标记为安全使用语境的模式。由用户通过ng-bind-html绑定任意HTML语句就是这方面的一个例子。我们称这些上下文转义为特权或…

Varnish 和 Squid比较到底强多少

对于坊间流传的:1.varnish的性能比squid高10~20倍2.squid 3.0的性能比2.6有提高本次测试将会揭示结果,是否varnish的架构真的能提升那么多的性能是否squid的新版本在性能上有所提升测试中将不对平台.软件.等等进行优化由于优化水平的关系将极大的影响结果.此次测试中的数据可以…