【pandas】用户手册:10分钟熟悉pandas(下)

news2025/1/19 3:41:57

数据分组

  • Splitting : 利用某些条件将数据进行分组
  • Applying : 函数应用于每个单独的分组
  • Combining : 合并最终的结果
df = pd.DataFrame(
    {
        "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
        "B": ["one", "one", "two", "three", "two", "two", "one", "three"],
        "C": np.random.randn(8),
        "D": np.random.randn(8),
    }
)
df
     A      B         C         D
0  foo    one -0.738005 -2.019732
1  bar    one  0.887627  0.015670
2  foo    two -0.108933 -0.077614
3  bar  three  0.076641  1.675694
4  foo    two -0.787585  0.466678
5  bar    two  0.193921 -0.345819
6  foo    one  0.846988 -1.513333
7  foo  three  1.110915  0.189766
df.groupby("A")[["C", "D"]].sum()
            C         D
A                      
bar  1.158189  1.345545
foo  0.323379 -2.954235

分组并应用 sum() 对他们进行求和汇总

df.groupby(["A", "B"]).sum()
                  C         D
A   B                        
bar one    0.887627  0.015670
    three  0.076641  1.675694
    two    0.193921 -0.345819
foo one    0.108983 -3.533064
    three  1.110915  0.189766
    two   -0.896518  0.389064

先对 A 分组,后对 B 分组

df.groupby(["B", "A"]).sum()
                  C         D
B     A                      
one   bar  0.887627  0.015670
      foo  0.108983 -3.533064
three bar  0.076641  1.675694
      foo  1.110915  0.189766
two   bar  0.193921 -0.345819
      foo -0.896518  0.389064

先对 B 分组,后对 A 分组

注意:对多个列进行操作,用 [["C", "D"]]
对一个列进行操作,可以用["C"], 当然也可以用 [["C"]]

数据表格形状改变

Stack

tuples = list(
    zip(
        ["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],
        ["one", "two", "one", "two", "one", "two", "one", "two"],
    )
)
# tuples
# 多索引值
index = pd.MultiIndex.from_tuples(tuples, names=["first", "second"])
df = pd.DataFrame(np.random.randn(8, 3), columns=["C1", "C2", "C3"], index=index)
df2 = df[:5]
df2
                    C1        C2        C3
first second                              
bar   one    -1.347431  0.153681 -1.006217
      two    -0.741849 -0.117988 -0.593601
baz   one     0.394623 -0.360702  0.062728
      two    -0.477569 -1.504717  0.124419
foo   one     0.340487 -1.045430 -0.623986
stacked = df2.stack()
stacked
first  second    
bar    one     C1   -1.347431
               C2    0.153681
               C3   -1.006217
       two     C1   -0.741849
               C2   -0.117988
               C3   -0.593601
baz    one     C1    0.394623
               C2   -0.360702
               C3    0.062728
       two     C1   -0.477569
               C2   -1.504717
               C3    0.124419
foo    one     C1    0.340487
               C2   -1.045430
               C3   -0.623986
dtype: float64

stack 将数据压缩成一个列
上面例子中 df2shape(5,3)
stackedshape(15, )

Pivot

创建一个电子表格风格的数据透视表作为数据框架。
函数原型: pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)

df = pd.DataFrame(
    {
        "C1": ["one", "one", "two", "three"] * 3,
        "C2": ["A", "B", "C"] * 4,
        "C3": ["foo", "foo", "foo", "bar", "bar", "bar"] * 2,
        "C4": np.random.randn(12),
        "C5": np.random.randn(12),
    }
)
df
       C1 C2   C3        C4        C5
0     one  A  foo -0.111176 -0.049645
1     one  B  foo -0.483144 -2.182207
2     two  C  foo  0.841522 -0.669410
3   three  A  bar  1.074447 -1.335228
4     one  B  bar -1.949381  0.594608
5     one  C  bar -1.544474 -0.873641
6     two  A  foo -0.837036 -1.054699
7   three  B  foo  0.537476 -0.359334
8     one  C  foo  0.169522 -1.594076
9     one  A  bar -0.595527  0.225416
10    two  B  bar -0.443136 -1.495795
11  three  C  bar -0.081103  1.551327

C1 列的值作为新的 label
C2, C3 列的值作为索引
C5 列的值作为表里的值, 无值则补 NaN

pd.pivot_table(df, values="C5", index=["C2", "C3"], columns=["C1"])
C1           one     three       two
C2 C3                               
A  bar  0.225416 -1.335228       NaN
   foo -0.049645       NaN -1.054699
B  bar  0.594608       NaN -1.495795
   foo -2.182207 -0.359334       NaN
C  bar -0.873641  1.551327       NaN
   foo -1.594076       NaN -0.669410

时间序列

pandas 具有简单、强大、高效的功能,可以在变频过程中进行重采样操作(如将秒级数据转换为5分钟级数据)。这在(但不限于)金融应用程序中非常常见。请参阅时间序列部分。

rng = pd.date_range("1/1/2023", periods=100, freq="S")
ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
ts
2023-01-01 00:00:00    194
2023-01-01 00:00:01    306
2023-01-01 00:00:02     54
2023-01-01 00:00:03    198
2023-01-01 00:00:04    368
                      ... 
2023-01-01 00:01:35    431
2023-01-01 00:01:36    276
2023-01-01 00:01:37    286
2023-01-01 00:01:38    223
2023-01-01 00:01:39    217
Freq: S, Length: 100, dtype: int32
ts.resample("5Min").sum()
2023-01-01    25350
Freq: 5T, dtype: int32

Series.tz_localize() localizes a time series to a time zone:

将时间序列化为本地化一个时区

rng = pd.date_range("1/6/2023 00:00", periods=5, freq="D")
ts = pd.Series(np.random.randn(len(rng)), rng)
ts_utc = ts.tz_localize('UTC')
ts_utc
2023-01-06 00:00:00+00:00    0.418221
2023-01-07 00:00:00+00:00   -1.714893
2023-01-08 00:00:00+00:00   -0.464742
2023-01-09 00:00:00+00:00    0.005428
2023-01-10 00:00:00+00:00    0.209386
Freq: D, dtype: float64

将一个时区转到另外一个时区

ts_utc.tz_convert("US/Eastern")
2023-01-05 19:00:00-05:00    0.418221
2023-01-06 19:00:00-05:00   -1.714893
2023-01-07 19:00:00-05:00   -0.464742
2023-01-08 19:00:00-05:00    0.005428
2023-01-09 19:00:00-05:00    0.209386
Freq: D, dtype: float64

数据分类

df["raw_grade"].astype("category")raw_grade类型换成了类别。

df = pd.DataFrame(
    {"id": [1, 2, 3, 4, 5, 6], "raw_grade": ["a", "b", "b", "a", "a", "e"]}
)
df["grade"] = df["raw_grade"].astype("category")
df["grade"]
0    a
1    b
2    b
3    a
4    a
5    e
Name: grade, dtype: category
Categories (3, object): ['a', 'b', 'e']

rename_categories 将类别名称重命名。

new_categories = ["very good", "good", "very bad"]
df["grade"] = df["grade"].cat.rename_categories(new_categories)
df["grade"]
0    very good
1         good
2         good
3    very good
4    very good
5     very bad
Name: grade, dtype: category
Categories (3, object): ['very good', 'good', 'very bad']

增加新的类别

df["grade"] = df["grade"].c> `df["raw_grade"].astype("category")` 将`raw_grade`类型换成了类别。at.set_categories(
    ["very bad", "bad", "medium", "good", "very good"]
)
df["grade"]
0    very good
1         good
2         good
3    very good
4    very good
5     very bad
Name: grade, dtype: category
Categories (5, object): ['very bad', 'bad', 'medium', 'good', 'very good']

显示数据

import matplotlib.pyplot as plt
plt.close("all")
ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2022", periods=1000))
ts = ts.cumsum()
ts.plot()

在这里插入图片描述

df = pd.DataFrame(np.random.randn(1000, 3), index=ts.index, columns=['A', 'B', 'C'])
df = df.cumsum()
plt.figure()
df.plot()
plt.legend(loc='best')

在这里插入图片描述

数据导入导出

CSV

df.to_csv("foo.csv")
pd.read_csv("foo.csv")
     Unnamed: 0          A          B          C
0    2022-01-01  -2.112172  -0.161145  -1.891843
1    2022-01-02  -1.787807  -0.469220  -1.592460
2    2022-01-03  -2.366840  -0.465609  -3.204489
3    2022-01-04  -2.913202  -0.220295  -3.415782
4    2022-01-05  -3.819952  -0.831654  -3.465468
..          ...        ...        ...        ...
995  2024-09-22  45.661361  13.760668  40.401864
996  2024-09-23  45.608082  14.161003  41.035935
997  2024-09-24  45.256665  12.934910  41.751221
998  2024-09-25  46.313781  12.783737  41.720967
999  2024-09-26  46.183519  12.790855  41.323802

[1000 rows x 4 columns]

HDF5

df.to_hdf("foo.h5", "df")
pd.read_hdf("foo.h5", "df")

这中间有可能会报错:

File d:\Anaconda3\envs\pytorch\lib\site-packages\pandas\compat\_optional.py:141, in import_optional_dependency(name, extra, errors, min_version)
    140 try:
--> 141     module = importlib.import_module(name)
    142 except ImportError:

File d:\Anaconda3\envs\pytorch\lib\importlib\__init__.py:127, in import_module(name, package)
    126         level += 1
--> 127 return _bootstrap._gcd_import(name[level:], package, level)

File <frozen importlib._bootstrap>:1014, in _gcd_import(name, package, level)

File <frozen importlib._bootstrap>:991, in _find_and_load(name, import_)

File <frozen importlib._bootstrap>:973, in _find_and_load_unlocked(name, import_)

ModuleNotFoundError: No module named 'tables'

During handling of the above exception, another exception occurred:

ImportError                               Traceback (most recent call last)
Cell In [90], line 1
----> 1 df.to_hdf("foo.h5", "df")
...
--> 144         raise ImportError(msg)
    145     else:
    146         return None

ImportError: Missing optional dependency 'pytables'.  Use pip or conda to install pytables.

提示用 pip install pytables 但还是会报错,最后改用 pip install tables 解决问题;

`ERROR: Could not find a version that satisfies the requirement pytables (from versions: none)
ERROR: No matching distribution found for pytables
                    A          B          C
2022-01-01  -2.112172  -0.161145  -1.891843
2022-01-02  -1.787807  -0.469220  -1.592460
2022-01-03  -2.366840  -0.465609  -3.204489
2022-01-04  -2.913202  -0.220295  -3.415782
2022-01-05  -3.819952  -0.831654  -3.465468
...               ...        ...        ...
2024-09-22  45.661361  13.760668  40.401864
2024-09-23  45.608082  14.161003  41.035935
2024-09-24  45.256665  12.934910  41.751221
2024-09-25  46.313781  12.783737  41.720967
2024-09-26  46.183519  12.790855  41.323802

[1000 rows x 3 columns]

excel

ModuleNotFoundError: No module named 'openpyxl'
# pip install openpyxl
df.to_excel("foo.xlsx", sheet_name="Sheet1")
pd.read_excel("foo.xlsx", "Sheet1", index_col=None, na_values=["NA"])
    Unnamed: 0          A          B          C
0   2022-01-01  -2.112172  -0.161145  -1.891843
1   2022-01-02  -1.787807  -0.469220  -1.592460
2   2022-01-03  -2.366840  -0.465609  -3.204489
3   2022-01-04  -2.913202  -0.220295  -3.415782
4   2022-01-05  -3.819952  -0.831654  -3.465468
..         ...        ...        ...        ...
995 2024-09-22  45.661361  13.760668  40.401864
996 2024-09-23  45.608082  14.161003  41.035935
997 2024-09-24  45.256665  12.934910  41.751221
998 2024-09-25  46.313781  12.783737  41.720967
999 2024-09-26  46.183519  12.790855  41.323802

[1000 rows x 4 columns]

【参考】

10 minutes to pandas — pandas 1.5.2 documentation (pydata.org)

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

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

相关文章

【正点原子FPGA连载】第十四章Linux基础外设的使用 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十四章Linux基…

百趣代谢组学文献分享:间歇性禁食调节糖尿病脑损伤多组学研究

百趣代谢组学文献分享&#xff0c;糖尿病已经成为一个全球问题&#xff0c;国际糖尿病联盟&#xff08;IDF&#xff09;发布的全球糖尿病地图&#xff08;第9版&#xff09;[1]显示&#xff0c;全球糖尿病患者人数不断上升&#xff0c;全球平均增长率为51%&#xff0c;目前有4.…

C#,图像二值化(23)——局部阈值的绍沃拉算法(Sauvola Thresholding)及源程序

1、局部阈值的绍沃拉算法&#xff08;Sauvola Thresholding&#xff09;Niblack和Sauvola阈值算法Niblack和Sauvola阈值是局部阈值技术&#xff0c;对于背景不均匀的图像非常有用&#xff0c;尤其是对于文本识别1、2。代替为整个图像计算单个全局阈值&#xff0c;通过使用考虑到…

【5】K8S_Deployment

目录 1、Deployment作用 2、deployment的冗余能力 3、deployment的多副本部署 4、deployment的扩缩容 5、deployment的自愈能力 6、滚动更新 7、版本回退 1、Deployment作用 控制Pod&#xff0c;使Pod拥有多副本&#xff0c;自愈&#xff0c;扩缩容等能力 2、deployme…

【正点原子FPGA连载】第十五章开发环境搭建 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十五章开发环境…

uniapp 窗口小工具、桌面小部件、微件(日历、时间) Ba-AwCalendarS

简介&#xff08;下载地址&#xff09; Ba-AwCalendarS 是一款窗口小工具&#xff08;桌面小部件、微件&#xff09;插件&#xff0c;默认为简单的时间样式&#xff0c;有其他界面需要&#xff0c;可联系作者定制。 支持定时更新&#xff08;本插件为每分钟&#xff09;支持点…

基于springboot,vue二手交易平台

开发工具&#xff1a;IDEA服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8项目构建&#xff1a;maven数据库&#xff1a;mysql5.7系统用户前台和管理后台两部分&#xff0c;项目采用前后端分离前端技术&#xff1a;vue elementUI服务端技术&#xff1a;springbootmybatis项目功…

【数据结构】开端序幕

写在前面&#xff0c;感同身受初学数据结构&#xff0c;是不是一脸懵&#xff0c;下面你中招了几条&#xff1f;&#x1f62d;怎么全是指针&#xff01;指针都不会啊&#xff01;怎么变量名那么长&#xff0c;好难理解啊!什么p&#xff0c;什么next&#xff0c;pp->next究竟…

LeetCode[1753]移除石头的最大得分

难度&#xff1a;中等题目&#xff1a;你正在玩一个单人游戏&#xff0c;面前放置着大小分别为 a、b和 c的 三堆 石子。每回合你都要从两个 不同的非空堆 中取出一颗石子&#xff0c;并在得分上加 1分。当存在 两个或更多 的空堆时&#xff0c;游戏停止。给你三个整数 a、b和 c…

动手深度学习-多层感知机

目录感知机多层感知机激活函数sigmoid函数tanh函数ReLU函数多层感知机的简洁实现参考教程&#xff1a;https://courses.d2l.ai/zh-v2/ 感知机 模型&#xff1a; 感知机模型就是一个简单的人工神经网络。 感知机是二分类的线性模型&#xff0c;其输入是实例的特征向量&#x…

智慧管廊智能化运维管理平台详情

运维管理平台 ​ 平台主界面完成各分系统情况的全局性展现&#xff0c;用图形界面的方法提升视觉效果感染力&#xff0c;根据图色区分正常、异常情况。 1、自然环境及设备监控 ​ 选用全景分层三维可视化地理信息系统及其多元化的二维在线地图从温度、风速、电力、排水、安防…

windows检测远程主机是否连通或者某个端口是否开启

文章目录一、检测主机是否连通步骤二、测试端口是否打开步骤telnet安装一、检测主机是否连通 ping命令是个使用频率极高的网络诊断工具&#xff0c;在Windows、Unix和Linux系统下均适用。它是TCP/IP协议的一部分&#xff0c;用于确定本地主机是否能与另一台主机交换数据报。根…

2022年度总结 EXI-小洲

文章目录一、第一次自我介绍二、2022我都干了些什么(我的收获)1.大专顺利毕业2.后端开发辞职3.第二次代表学校参加江西省职业院校大数据技能大赛4.专升本考试5.参加泰迪杯第五届"数据分析技能赛"6.在csdn开始写博文7.在本科阶段&#xff0c;我又认识了几个会喝点酒的…

【2022年度总结】总结过去,展望未来

文章目录前言回顾过去一、刷题道路两眼黑二、助人为乐本身便是一种快乐展望未来兔年Flag博客文章竞赛目标学习目标志同道合前言 注册CSDN一年了&#xff0c;新年伊始&#xff0c;正好趁着这个时间复盘一下逝去的2022&#xff01; 很幸运&#xff0c;在对计算机知识懵懂无知的时…

分布式调度XXL-JOB急速入门

文章目录1.业界分布式定时任务框架简介2.分布式调度XXL-JOB核心特性3.Docker部署MySQL8.04.XXL-JOB数据库脚本介绍5.Docker部署XXL-JOB服务端6.XXL-JOB UI菜单模块介绍7.SpringBoot整合XXL-JOB8.分布式调度参数传递9.分布式调度日志埋点10.自定义返回执行成功或失败11.XXL-Job高…

C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(二)

C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(二) 测试软件: TIA PORTAL V15.1 S7-PLCSIM ADVANCED V3.0 Visual Studio 2019 在上次的分享中,我们了解了TIA博途一侧的具体组态配置,具体内容可参考以下链接中的内容: C#上位机基础学习_基于SOCKET实现与PLC服务…

【ROS】—— 机器人系统仿真 —URDF优化_xacro (十四)

文章目录前言1. URDF优化_xacro2. Xacro_快速体验3. Xacro_语法详解3.1 属性与算数运算3.2 宏3.3 文件包含4. Xacro_完整使用流程示例4.1 编写 Xacro 文件4.2 集成launch文件5. Xacro_实操前言 &#x1f4e2;本系列将依托赵虚左老师的ROS课程&#xff0c;写下自己的一些心得与笔…

SpringBoot自动配置原理

1、自动配置原理 1、我们编写的SpringBoot启动类上有一个SpringBootApplication注解&#xff0c;表示当前类是springboot的启动类(入口类)。 package com.baidou;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBo…

微信小程序2.9.0基础库canvas2D新API,生成海报保存到手机功能实现

canvasToTempFilePath的官方文档写着在 draw()回调里调用该方法才能保证图片导出成功。文档地址&#xff1a;wx.canvasToTempFilePath(Object object, Object this) | 微信开放文档 我在这里面使用的canva 获取canvas实例&#xff0c;使用的官方的代码。用一个变量canvas保存实…

聊聊 AI 平台存储方案和选型

最近火爆全网的 ChatGPT 再次带来一股 AI 热潮。 过去的五年&#xff0c;AI 快速发展并应用到很多领域中。作为一家存储企业&#xff0c;我们也感受到了 AI 行业的活力&#xff0c;和我们交流团队中&#xff0c;AI 企业越来越多&#xff0c;有自动驾驶、蛋白质结构预测、量化投…