Pandas 快速入门教程

Pandas 概览

Pandas 是 Pythonopen in new window 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas 离这个目标已经越来越近了。

Pandas 适用于处理以下类型的数据:

  • 与 SQL 或 Excel 表类似的,含异构列的表格数据;

  • 有序和无序(非固定频率)的时间序列数据;

  • 带行列标签的矩阵数据,包括同构或异构型数据;

  • 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。

Pandas 的主要数据结构是 Seriesopen in new window(一维数据)与 DataFrameopen in new window(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。对于 R 用户,DataFrame 提供了比 R 语言 data.frame 更丰富的功能。Pandas 基于 NumPyopen in new window 开发,可以与其它第三方科学计算支持库完美集成。

Pandas 就像一把万能瑞士军刀,下面仅列出了它的部分优势 :

  • 处理浮点与非浮点数据里的缺失数据,表示为 NaN

  • 大小可变:插入或删除 DataFrame 等多维对象的列;

  • 自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;

  • 强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;

  • 把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;

  • 基于智能标签,对大型数据集进行切片花式索引子集分解等操作;

  • 直观地合并(merge)连接(join)数据集;

  • 灵活地重塑(reshape)透视(pivot)数据集;

  • 支持结构化标签:一个刻度支持多个标签;

  • 成熟的 IO 工具:读取文本文件(CSV 等支持分隔符的文件)、Excel 文件、数据库等来源的数据,利用超快的 HDF5 格式保存 / 加载数据;

  • 时间序列:支持日期范围生成、频率转换、移动窗口统计、移动窗口线性回归、日期位移等时间序列功能。

这些功能主要是为了解决其它编程语言、科研环境的痛点。处理数据一般分为几个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想工具。

其它说明:

  • Pandas 速度很快。Pandas 的很多底层算法都用 Cythonopen in new window 优化过。然而,为了保持通用性,必然要牺牲一些性能,如果专注某一功能,完全可以开发出比 Pandas 更快的专用工具。

  • Pandas 是 statsmodelsopen in new window 的依赖项,因此,Pandas 也是 Python 中统计计算生态系统的重要组成部分。

  • Pandas 已广泛应用于金融领域。

数据结构

维数名称描述
1Series带标签的一维同构数组
2DataFrame带标签的,大小可变的,二维异构表格

为什么有多个数据结构?

Pandas 数据结构就像是低维数据的容器。比如,DataFrame 是 Series 的容器,Series 则是标量的容器。使用这种方式,可以在容器中以字典的形式插入或删除对象。

此外,通用 API 函数的默认操作要顾及时间序列与截面数据集的方向。多维数组存储二维或三维数据时,编写函数要注意数据集的方向,这对用户来说是一种负担;如果不考虑 C 或 Fortran 中连续性对性能的影响,一般情况下,不同的轴在程序里其实没有什么区别。Pandas 里,轴的概念主要是为了给数据赋予更直观的语义,即用“更恰当”的方式表示数据集的方向。这样做可以让用户编写数据转换函数时,少费点脑子。

处理 DataFrame 等表格数据时,index(行)或 columns(列)比 axis 0axis 1 更直观。用这种方式迭代 DataFrame 的列,代码更易读易懂:

for col in df.columns:   series = df[col]   # do something with series​
import pandas as pd
import random
from faker import Faker
from openpyxl import Workbook
​
# 创建虚假数据生成器
fake = Faker()
​
# 创建一个数据帧,生成虚假数据
n=1000
data = {   '姓名': [fake.name() for _ in range(n)],   '电子邮件': [fake.email() for _ in range(n)],   '电话号码': [fake.phone_number() for _ in range(n)],   '地址': [fake.address() for _ in range(n)],   '工资': [random.randint(1000,10000) for _ in range(n)]
}
​
df = pd.DataFrame(data)
​
# 创建一个Excel工作簿并将数据写入工作表
wb = Workbook()
ws = wb.active
​
# 将数据帧的列标题写入工作表的第一行
for col, column_name in enumerate(df.columns, start=1):   ws.cell(row=1, column=col, value=column_name)
​
# 将数据写入工作表
for row, record in enumerate(df.values, start=2):   for col, value in enumerate(record, start=1):       ws.cell(row=row, column=col, value=value)
​
# 保存Excel文件
wb.save('虚假数据.xlsx')
​
df=pd.read_excel('虚假数据.xlsx')
for col in df.columns:   series = df[col]   print(col,series)
​
姓名 0                  Susan Ortiz
1              Bryan Patterson
2                Betty Stevens
3                  Tina Mendez
4                Edward Miller               ...           
995                Maria Davis
996        Stephanie Underwood
997            Nicole Robinson
998    Mr. Charles Lawrence MD
999             Angela Johnson
Name: 姓名, Length: 1000, dtype: object
电子邮件 0             jeffrey05@example.net
1             xdavidson@example.com
2              henrykey@example.net
3               gchaney@example.com
4                awatts@example.org                  ...             
995              kheath@example.com
996        loriwilliams@example.org
997               wmann@example.com
998    margaretfriedman@example.org
999             hrivers@example.net
Name: 电子邮件, Length: 1000, dtype: object
电话号码 0        (551)885-6301x47608
1                 1430520935
2       001-117-798-3751x241
3          701.251.0146x3110
4          180-238-9727x8554              ...          
995         340-283-5841x845
996        (668)810-5237x874
997            (844)113-8337
998    001-563-272-0102x6982
999       914-902-3095x90088
Name: 电话号码, Length: 1000, dtype: object
地址 0      9266 Abbott Burg Suite 758\nNorth Stephanie, I...
1       439 Gonzalez Turnpike\nWest Zoechester, PA 51406
2      56319 Matthew Estate Apt. 619\nNorth Michael, ...
3                 4664 Dawson Burgs\nLongmouth, MH 51592
4      485 Rogers Prairie Suite 472\nPearsonmouth, MP...                            ...                        
995    78764 Jennifer Squares Suite 495\nAimeetown, V...
996     739 Donald Mill Apt. 480\nJenniferstad, CT 56683
997         540 Christine Shoals\nRichardsview, IA 65480
998    20154 Craig Path Suite 691\nPetersonland, SD 8...
999    0537 Rebecca Lock Apt. 835\nLindsayport, MA 44282
Name: 地址, Length: 1000, dtype: object
工资 0      9183
1      3573
2      7649
3      3934
4      1371      ... 
995    3751
996    2966
997    7967
998    3144
999    4289
Name: 工资, Length: 1000, dtype: int64

大小可变与数据复制

Pandas 所有数据结构的值都是可变的,但数据结构的大小并非都是可变的,比如,Series 的长度不可改变,但 DataFrame 里就可以插入列。

Pandas 里,绝大多数方法都不改变原始的输入数据,而是复制数据,生成新的对象。 一般来说,原始输入数据不变更稳妥。

十分钟入门 Pandas

本节是帮助 Pandas 新手快速上手的简介。烹饪指南里介绍了更多实用案例。

本节以下列方式导入 Pandas 与 NumPy:

In [1]: import numpy as np
​
In [2]: import pandas as pd

生成对象

详见数据结构简介文档。

用值列表生成 Seriesopen in new window 时,Pandas 默认自动生成整数索引:

​
In [3]: s = pd.Series([1, 3, 5, np.nan, 6, 8])
​
In [4]: s
Out[4]: 
0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64
用含日期时间索引与标签的 NumPy 数组生成 DataFrameopen in new window:dates = pd.date_range('20130101', periods=6)
print(dates)
df=pd.DataFrame(np.random.random((6,5)),index=dates,columns=list('ABCDE'))
print(df)
​
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',              '2013-01-05', '2013-01-06'],             dtype='datetime64[ns]', freq='D')                  A         B         C         D         E
2013-01-01  0.821722  0.838978  0.684531  0.867492  0.084755
2013-01-02  0.784795  0.971571  0.509171  0.046268  0.806170
2013-01-03  0.546673  0.073271  0.738921  0.297711  0.735907
2013-01-04  0.621592  0.403766  0.802696  0.109643  0.171212
2013-01-05  0.469991  0.893711  0.461032  0.326327  0.424273
2013-01-06  0.680158  0.605057  0.230274  0.458527  0.647544
​
用 Series 字典对象生成 DataFrame:In [9]: df2 = pd.DataFrame({'A': 1.,  ...:                     'B': pd.Timestamp('20130102'),  ...:                     'C': pd.Series(1, index=list(range(4)), dtype='float32'),  ...:                     'D': np.array([3] * 4, dtype='int32'),  ...:                     'E': pd.Categorical(["test", "train", "test", "train"]),  ...:                     'F': 'foo'})  ...: 
​
In [10]: df2
Out[10]:     A          B    C  D      E    F
0  1.0 2013-01-02  1.0  3   test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3   test  foo
3  1.0 2013-01-02  1.0  3  train  foo
DataFrame 的列有不同数据类型open in new window。In [11]: df2.dtypes
Out[11]: 
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object
IPython支持 tab 键自动补全列名与公共属性。下面是部分可自动补全的属性:In [12]: df2.<TAB>  # noqa: E225, E999
df2.A                  df2.bool
df2.abs                df2.boxplot
df2.add                df2.C
df2.add_prefix         df2.clip
df2.add_suffix         df2.clip_lower
df2.align              df2.clip_upper
df2.all                df2.columns
df2.any                df2.combine
df2.append             df2.combine_first
df2.apply              df2.compound
df2.applymap           df2.consolidate
​
df2.D

列 A、B、C、D 和 E 都可以自动补全;为简洁起见,此处只显示了部分属性。

查看数据

详见基础用法open in new window文档。

下列代码说明如何查看 DataFrame 头部和尾部数据:

In [13]: df.head()
Out[13]:                   A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.7215

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python第三方包】控制台进度条——让你控制台变的更漂亮(tqdm)

文章目录 前言一、什么是tqdm?二、如何使用tqdm三、tqdm的基础使用3.1 基本使用3.2 使用total参数指定总步数3.3 在列表上使用3.4 使用desc参数为进度条添加描述信息3.5 动态更新进度条3.6 定制化外观和格式自定义进度条外观讲解3.7 使用tqdm的trange函数(生成器)3.8 在文件…

JavaScript作用域的用法

作用域 外部类无法访问内部类 外部类想要访问内部类需要闭包 两个函数可以有相同的变量名 两个函数包含关系&#xff0c;访问被包含的函数&#xff0c;在其该函数的外边可访问 如果外部函数存在这个同名的函数变量&#xff0c;则内部函数会屏蔽外部函数的 规范&#xff1a…

在数组中合并相同id数据,并且数据中某一字段不一致也统一合并进去

封装的合并的函数 function formateArray(data:any){// ts-ignorelet res data.reduce((ac,a) > {// ts-ignorelet index ac.findIndex(x > x.id a.id);index -1 ? ac.push({...a}) : ac[index] {...ac[index],...a};return ac;},[])return res;}使用 allData 原始…

腾讯云国际站服务器如何打开音频设备?

在使用腾讯云服务器进行音频处理或直播等活动时&#xff0c;或许需求翻开服务器的音频设备。本文将详细介绍如安在腾讯云服务器上翻开音频设备。 在腾讯云服务器上翻开音频设备的过程如下&#xff1a; 登录腾讯云服务器办理控制台 1.首先&#xff0c;需求登录腾讯云服务器的办理…

【jmeter】接口测试流程

1、Jmeter简介 Jmeter是由Apache公司开发的一个纯Java的开源项目&#xff0c;即可以用于做接口测试也可以用于做性能测试。 Jmeter具备高移植性&#xff0c;可以实现跨平台运行。 Jmeter可以实现分布式负载。 Jmeter采用多线程&#xff0c;允许通过多个线程并发取样或通过独…

Cron表达式每隔两小时执行一次

Cron表达式每隔两小时执行一次 0 0 */2 * * ?验证正确性

算法刷题总结(全)

刷题总结 by lds 2023-9-5 文章目录 1.数组/字符串1.1 合并两个有序数组【easy】1.2 移除元素【easy】1.3 删除有序数组中的重复项【easy】1.4 删除有序数组中的重复项II【mid】1.5 多数元素【easy】1.6 大数相加---【美团面试手撕题目】1.7 轮转数组【mid】1.8 买卖股票的最佳…

fastadmin找不到后台控制器。登录之后找不到后台控制器

nginx加配置项 伪静态那块 location / { if (!-e KaTeX parse error: Expected }, got EOF at end of input: … rewrite ^(.*) /index.php?s 1 l a s t ; b r e a k ; r e w r i t e ( . ? p ˙ h p ) ( / . ) 1 last; break; rewrite ^(.?\.php)(/.) 1last;break;rewrit…

java 并发执行批量异步任务(Future、 CompletableFuture 实现)

文章目录 前言一、创建线程池二、Future 类并发实现三、CompletableFuture 类并发实现 前言 当我们需要批量执行一些比较耗时任务时&#xff0c;使用并发的方式减少业务处理的整体时间&#xff0c;防止客户端响应时间过长。 一、创建线程池 import org.springframework.beans…

授权专利破百,通付盾潜心精研迎接数字时代新征程

2023年10月10日&#xff0c;通付盾发明专利《一种零信任和保护数据隐私的数据确权系统及其方法》获得授权&#xff0c;至此公司授权发明专利突破100件&#xff0c;是公司科创属性的集中展现&#xff0c;也是公司成为数字化高端软件与服务提供商道路上的新里程碑。 自成立以来&a…

掌握C++魔法:深入解析类与对象(上篇)

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; &#x1f354;前言&#xff1a; 之前我们学习了从C语言转到C后我们需要知道的一些关键改动与变化。今天我们就要学习C独有的类与对象。在谈论类与对象之前我们先说一下什么是面向对象的C&#xff0c;什么是面向过程的C语…

【C++之类型转换】static_cast、dynamic_cast、const_cast、reinterpret_cast用途与限制

概述 类型转换是将一个变量的数据类型转换为另一个数据类型的过程。 在C中&#xff0c;有四种类型转换运算符&#xff1a;static_cast、dynamic_cast、const_cast和reinterpret_cast。 1. static_cast: 用途&#xff1a;主要用于基本数据类型和非多态类之间的转换&#xff0…

NSDT孪生编辑器助力智慧城市

技术有能力改变城市的运作方式&#xff0c;提高效率&#xff0c;为游客和居民提供更好的体验&#xff0c;实现更可持续的运营和更好的决策。 当今城市面临的主要挑战是什么&#xff0c;成为智慧城市如何帮助克服这些挑战&#xff1f; 我们生活在一个日益城市化的世界&#xf…

【SA8295P 源码分析 (二)】16 - QNX侧 TouchScreen Panel (TP)线程函数 tp_recv_thread 源码分析

【SA8295P 源码分析】16 - QNX侧 TouchScreen Panel (TP)线程函数 tp_recv_thread 源码分析 一、TP 线程函数:tp_recv_thread()二、处理&上报 坐标数据 cypress_read_touch_data()系列文章汇总见:《【SA8295P 源码分析 (二)】Display 模块 文章链接汇总 - 持续更新中》…

杭电oj--求数列的和

Problem Description 数列的定义如下&#xff1a; 数列的第一项为n&#xff0c;以后各项为前一项的平方根&#xff0c;求数列的前m项的和。 Input 输入数据有多组&#xff0c;每组占一行&#xff0c;由两个整数n&#xff08;n<10000&#xff09;和m(m<1000)组成&#x…

【SA8295P 源码分析 (一)】76 - Thermal 功耗 之 /dev/thermalmgr 相关调试命令汇总

【SA8295P 源码分析】76 - Thermal 功耗 之 /dev/thermalmgr 相关调试命令汇总 1、配置文件:/mnt/etc/system/config/thermal-engine.conf2、获取当前SOC所有温度传感器的温度:cat /dev/thermalmgr3、查看所有 Thermal 默认配置和自定义配置:echo query config > /dev/th…

React之refs

一、是什么 Refs 在计算机中称为弹性文件系统&#xff08;英语&#xff1a;Resilient File System&#xff0c;简称ReFS&#xff09; React 中的 Refs提供了一种方式&#xff0c;允许我们访问 DOM节点或在 render方法中创建的 React元素 本质为ReactDOM.render()返回的组件实…

【复盘】记录一次数据库连接资源占用完毕

背景 因为历史原因项目使用的是JDBC原始SQL&#xff0c;然后进行拉去三方数据进行解析分析。跑了一会之后发现影响到了线上业务&#xff0c;连接错误。 一查看其实就是刚才跑的定时导致的&#xff0c;分析了下没有及时释放数据库连接。导致资源耗尽。数据库异常。 所以这里其实…

Java身份证OCR识别 - 阿里云API【识别准确率超过99%】

1. 阿里云API市场 https://market.aliyun.com/products/57124001/cmapi00063618.html?spm5176.28261954.J_7341193060.41.60e52f3drduOTh&scm20140722.S_market%40%40API%E5%B8%82%E5%9C%BA%40%40cmapi00063618._.ID_market%40%40API%E5%B8%82%E5%9C%BA%40%40cmapi0006361…

美国科技消费品公司Society Brands完成2500万美元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国俄亥俄州坎顿的科技消费品公司Society Brands今日宣布已完成2500万美元融资。 本轮融资由Gullane Capital领投&#xff0c;Callais Capital和North Coast Ventures跟投。 该公司打算利…