成为Pandas专业人士应该掌握的 30 种方法

news2024/11/26 19:29:22

一、说明

        Pandas无疑是Python有史以来最好的库之一,用于表格数据整理和处理任务。但是,如果您是新手并试图牢牢掌握 Pandas 库,那么如果您从 Pandas 的官方文档开始,一开始事情可能会显得非常令人生畏和不知所措。

二、pandas主题概述

        主题列表如下所示:

官方 Pandas API 文档中的主题列表(图片来自作者)(来源:这里)

您可以在此处找到本文的代码。

三、使用方法列举

3.1 导入库

        当然,如果你想使用熊猫库,你应该导入它。这里广泛采用的约定是将别名设置为 。pandaspd

import pandas as pd

3.2  读取 CSV

        CSV 通常是从中读取 Pandas 数据帧的最流行的文件格式。您可以使用该方法创建熊猫数据帧:pd.read_csv()

file = "file.csv"

df = pd.read_csv(file)
print(df)

>>
   col1  col2 col3
0     1     2    A
1     3     4    B

我们可以验证使用该方法创建的对象类型。type()

type(df)
>>
pandas.core.frame.DataFrame

3.3 将数据帧存储到 CSV

        正如 CSV 普遍用于从中读取数据帧一样,它们也被广泛用于将数据帧转储到。

使用如下所示的方法:df.to_csv()

df.to_csv("file.csv", sep = "|", index = False)

        分隔符 () 指示列分隔符,并指示 Pandas 不要在 CSV 文件中写入数据帧的索引。sepindex=False

!cat file.csv
>>
col1|col2|col3
1|2|A
3|4|B

3.4 创建数据帧

若要创建熊猫数据帧,请使用以下方法:pd.DataFrame()

data = [[1, 2, "A"], 
        [3, 4, "B"]]

df = pd.DataFrame(data, 
                  columns = ["col1", "col2", "col3"])
print(df)
>>
   col1  col2 col3
0     1     2    A
1     3     4    B

3.4.1 从列表中列创建

        一种流行的方法是将给定的列表列表转换为数据帧:

data = [[1, 2, "A"], 
        [3, 4, "B"]]

df = pd.DataFrame(data, 
                  columns = ["col1", "col2", "col3"])
print(df)
》》
   col1  col2 col3
0     1     2    A
1     3     4    B

3.4.2 来自字典

        另一种流行的方法是将Python字典转换为DataFrame:

data = {'col1': [1, 2], 
        'col2': [3, 4], 
        'col3': ["A", "B"]}

df = pd.DataFrame(data=data)
print(df)
》》
   col1  col2 col3
0     1     3    A
1     2     4    B

您可以在此处阅读有关创建数据帧的详细信息。

3.5 数据帧的形状

        数据帧本质上是带有列标题的矩阵。因此,它具有特定数量的行和列。

       您可以使用参数打印尺寸,如下所示:shape

print(df)
print("Shape:", df.shape)
》》
   col1  col2 col3
0     1     3    A
1     2     4    B
Shape: (2, 3)

        这里,元组 () 的第一个元素是行数,第二个元素 () 是列数。23

3.6 查看前 N 行

        通常,在实际数据集中,您将有很多行。

        在这种情况下,人们通常只对查看数据帧的第一行感兴趣。n

您可以使用该方法打印第一行:df.head(n)n

print(df.head(5))
》》
   col1  col2 col3
0     1     2    A
1     3     4    B
2     5     6    C
3     7     8    D
4     9    10    E

3.7打印列的数据类型

        Pandas 为数据帧中的每个列分配适当的数据类型。

        您可以使用以下参数打印所有列的数据类型:dtypes

df.dtypes
》》
col1      int8
col2     int64
col3    object
dtype: object

3.8 修改列的数据类型

        如果要更改列的数据类型,可以使用如下方法:astype()

df["col1"] = df["col1"].astype(np.int8)

print(df.dtypes)
>>
col1      int8
col2     int64
col3    object
dtype: object

3.9  打印有关数据帧的描述性信息

3.9.1 方法 1

        第一种方法 () 用于打印缺失值统计信息和数据类型。df.info()

df.info()
》》
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   col1    10 non-null     int8  
 1   col2    10 non-null     int64 
 2   col3    10 non-null     object
dtypes: int64(1), int8(1), object(1)
memory usage: 298.0+ bytes

3.9.2 方法 2

        这相对更具描述性,并打印标准统计信息,如 、 等。每个数值列。meanstandard deviationmaximum

方法是 。df.describe()

print(df.describe())
>>
        col1   col2
count  10.00  10.00
mean   10.00  11.00
std     6.06   6.06
min     1.00   2.00
25%     5.50   6.50
50%    10.00  11.00
75%    14.50  15.50
max    19.00  20.00

3.10 填充 NaN 值

        在真实数据集中,丢失数据几乎是不可避免的。在这里,您可以使用该方法将它们替换为特定值。df.fillna()

df = pd.DataFrame([[1, 2, "A"], [np.nan, 4, "B"]], 
                  columns = ["col1", "col2", "col3"])
print(df)
>>
   col1  col2 col3
0   1.0     2    A
1   NaN     4    B

在我之前的博客中阅读有关处理缺失数据的更多信息:

df.fillna(0, inplace = True) print(df)
>>
   col1  col2 col3
0   1.0     2    A
1   0.0     4    B

3.11  加入数据帧

如果要使用联接键合并两个数据帧,请使用以下方法:pd.merge()

df1 = ...
df2 = ...

print(df1)
print(df2)
>>
   col1  col2 col3
0     1     2    A
1     3     4    A
2     5     6    B
  col3 col4
0    A    X
1    B    Y
pd.merge(df1, df2, on = "col3")
>>
   col1  col2 col3 col4
0     1     2    A    X
1     3     4    A    X
2     5     6    B    Y

3.12 对数据帧进行排序

        排序是数据科学家用来订购数据帧的另一种典型操作。可以使用该方法对数据帧进行排序。df.sort_values()

df = pd.DataFrame([[1, 2,  "A"], 
                   [5, 8,  "B"], 
                   [3, 10, "B"]], 
                  columns = ["col1", "col2", "col3"])

print(df.sort_values("col1"))
>>
   col1  col2 col3
0     1     2    A
2     3    10    B
1     5     8    B

3.13 对数据帧进行分组

        要对数据帧进行分组并执行聚合,请使用 Pandas 中的方法,如下所示:groupby()

df = pd.DataFrame([[1, 2,  "A"], 
                   [5, 8,  "B"], 
                   [3, 10, "B"]], 
                  columns = ["col1", "col2", "col3"])

df.groupby("col3").agg({"col1":sum, "col2":max})
>>
      col1  col2
col3            
A        1     2
B        8    10

3.14 重命名列

        如果要重命名列标题,请使用该方法,如下所示:df.rename()

df = pd.DataFrame([[1, 2,  "A"], 
                   [5, 8,  "B"], 
                   [3, 10, "B"]], 
                  columns = ["col_A", "col2", "col3"])

df.rename(columns = {"col_A":"col1"})
>>
   col1  col2 col3
0     1     2    A
1     5     8    B
2     3    10    B

3.15 删除列

        如果要删除列,请使用以下方法:df.drop()

df = pd.DataFrame([[1, 2,  "A"], 
                   [5, 8,  "B"], 
                   [3, 10, "B"]], 
                  columns = ["col1", "col2", "col3"])

print(df.drop(columns = ["col1"]))
>>
   col2 col3
0     2    A
1     8    B
2    10    B

3.16 添加新列

        添加新列的两种广泛使用的方法是:

3.16.1 方法 1

        您可以使用赋值运算符添加新列:

df = pd.DataFrame([[1, 2], [3, 4]], 
                  columns = ["col1", "col2"])

df["col3"] = df["col1"] + df["col2"]
print(df)
>>
   col1  col2  col3
0     1     2     3
1     3     4     7

3.16.1 方法 2

        或者,您也可以按如下方式使用该方法:df.assign()

df = pd.DataFrame([[1, 2], [3, 4]], 
                  columns = ["col1", "col2"])

df = df.assign(col3 = df["col1"] + df["col2"])

print(df)
>>
   col1  col2  col3
0     1     2     3
1     3     4     7

3.17 筛选数据帧

        有多种方法可以根据条件筛选数据帧。

方法 1:布尔过滤

        在这里,如果该行的条件计算结果为 。True

df = pd.DataFrame([[1, 2,  "A"], 
                   [5, 8,  "B"], 
                   [3, 10, "B"]], 
                  columns = ["col1", "col2", "col3"])

print(df[df["col2"] > 5])
>>
   col1  col2 col3
1     5     8    B
2     3    10    B

对于要筛选的行,中的值应大于 5col2

该方法用于选择其值属于值列表的行。isin()

df = pd.DataFrame([[1, 2,  "A"], 
                   [5, 8,  "B"], 
                   [3, 10, "C"]], 
                  columns = ["col1", "col2", "col3"])

filter_list = ["A", "C"]
print(df[df["col3"].isin(filter_list)])
>>
   col1  col2 col3
0     1     2    A
2     3    10    C

方法 2:获取列

您还可以按如下方式筛选整个列:

df["col1"] ## or df.col1
>>
0    1
1    5
2    3
Name: col1, dtype: int64

方法3:按标签选择

在基于标签的选择中,请求的每个标签都必须位于数据帧的索引中。

整数也是有效的标签,但它们指的是标签而不是位置。

请考虑以下数据帧。

df = pd.DataFrame([[6, 5,  10], 
                   [5, 8,  6], 
                   [3, 10, 4]], 
                  columns = ["Maths", "Science", "English"],
                  index = ["John", "Mark", "Peter"])

print(df)
>>
       Maths  Science  English
John       6        5       10
Mark       5        8        6
Peter      3       10        4

我们使用基于标签的选择方法。df.loc

df.loc["John"]
>>
Maths       6
Science     5
English    10
Name: John, dtype: int64
df.loc["Mark", ["Maths", "English"]]
>>
Maths      5
English    6
Name: Mark, dtype: int64

        但是,在 中,不允许使用 position 来筛选数据帧,如下所示:df.loc[]

df.loc[0]
>>
Execution Error

KeyError: 0

        要实现上述目标,您应该使用 使用基于位置的选择。df.iloc[]

方法4:按位置选择

df.iloc[0]
>>
Maths       6
Science     5
English    10
Name: John, dtype: int64

3.18 在数据帧中查找唯一值

        若要打印列中的所有非重复值,请使用该方法。unique()

df = pd.DataFrame([[1, 2,  "A"], 
                   [5, 8,  "B"], 
                   [3, 10, "A"]], 
                  columns = ["col1", "col2", "col3"])

df["col3"].unique()
>>
array(['A', 'B'], dtype=object)

如果要打印唯一值的数量,请改用。nunique()

df["col3"].nunique()
>>
2

3.19 将函数应用于数据帧

如果要将函数应用于列,请使用如下所示的方法:apply()

def add_cols(row):
    return row.col1 + row.col2

df = pd.DataFrame([[1, 2], 
                   [5, 8], 
                   [3, 9]], 
                  columns = ["col1", "col2"])
                  
df["col3"] = df.apply(add_cols, axis=1)
print(df)
>>
   col1  col2  col3
0     1     2     3
1     5     8    13
2     3     9    12

您还可以将方法应用于单个列,如下所示:

def square_col(num):
    return num**2

df = pd.DataFrame([[1, 2], 
                   [5, 8], 
                   [3, 9]], 
                  columns = ["col1", "col2"])
                  
df["col3"] = df.col1.apply(square_col)
print(df)
>>
   col1  col2  col3
0     1     2     1
1     5     8    25
2     3     9     9

3.20 处理重复数据

        您可以使用以下方法标记所有重复行:df.duplicate()

df = pd.DataFrame([[1, "A"], 
                   [2, "B"], 
                   [1, "A"]], 
                  columns = ["col1", "col2"])
                  
df.duplicated(keep=False)

所有重复的行都标记为 True,并保持 = False。

此外,您可以使用该方法删除重复的行,如下所示:df.drop_duplicates()

df = pd.DataFrame([[1, "A"], 
                   [2, "B"], 
                   [1, "A"]], 
                  columns = ["col1", "col2"])
                  
print(df.drop_duplicates())
》》
   col1 col2
0     1    A
1     2    B

        将保留重复行的一个副本。

3.21 查找值的分布

        若要查找列中每个唯一值的频率,请使用以下方法: value_counts()

df = pd.DataFrame([[1, "A"], 
                   [2, "B"], 
                   [1, "A"]], 
                  columns = ["col1", "col2"])
                  
print(df.value_counts("col2"))
》》
col2
A    2
B    1
dtype: int64

3.22 重置数据帧的索引

若要重置数据帧的索引,请使用以下方法:df.reset_index()

df = pd.DataFrame([[6, 5,  10], 
                   [5, 8,  6], 
                   [3, 10, 4]], 
                  columns = ["col1", "col2", "col3"],
                  index = [2, 3, 1])

print(df.reset_index())
》》
   index  col1  col2  col3
0      2     6     5    10
1      3     5     8     6
2      1     3    10     4

要删除旧索引,请将参数传递给上述方法:drop=True

df.reset_index(drop=True)
》》
   col1  col2  col3
0     6     5    10
1     5     8     6
2     3    10     4

3.23 查找交叉制表

        若要返回两列中每个值组合的频率,请使用以下方法:pd.crosstab()

df = pd.DataFrame([["A", "X"], 
                   ["B", "Y"], 
                   ["C", "X"],
                   ["A", "X"]], 
                  columns = ["col1", "col2"])

print(pd.crosstab(df.col1, df.col2))
》》
col2  X  Y
col1      
A     2  0
B     0  1
C     1  0

3.24 旋转数据帧

        数据透视表是Excel中常用的数据分析工具。与上面讨论的交叉表类似,Pandas 中的数据透视表提供了一种交叉制表数据的方法。

        请考虑以下数据帧:

df = ...

print(df)
》》
    Name  Subject  Marks
0   John    Maths      6
1   Mark    Maths      5
2  Peter    Maths      3
3   John  Science      5
4   Mark  Science      8
5  Peter  Science     10
6   John  English     10
7   Mark  English      6
8  Peter  English      4

        使用该方法,您可以将列条目转换为列标题:pd.pivot_table()

pd.pivot_table(df, 
               index = ["Name"],
               columns=["Subject"], 
               values='Marks',
               fill_value=0)
》》
Subject  English  Maths  Science
Name                            
John          10      6        5
Mark           6      5        8
Peter          4      3       10

四、后记

        以上列举了部分pandas数据操作,这是基础的一些操作;在现实中,panda有一个庞大的操作手册,我们无法描述其全部,只能部分阐述,其它的只能边用边学。

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

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

相关文章

leetcode每日一练-第98题- 验证二叉搜索树

一、思路 因为要验证多个节点是否是二叉搜索树,因此使用递归 二、解题方法 设计一个递归函数 helper(root, lower, upper) 来递归判断&#xff0c;函数表示考虑以 root 为根的子树&#xff0c;判断子树中所有节点的值是否都在 (l,r)的范围内&#xff08;注意是开区间&#x…

arm 函数栈回溯

大概意思就是arm每个函数开始都会将PC、LR、SP以及FP四个寄存器入栈。 下面我们看一下这四个寄存器里面保存的是什么内存 arm-linux-gnueabi-gcc unwind.c -mapcs -w -g -o unwind&#xff08;需要加上-mapcs才会严格按照上面说的入栈&#xff09; #include <stdio.h> …

Scaling Instruction-Finetuned Language Models

Paper name Scaling Instruction-Finetuned Language Models Paper Reading Note Paper URL: https://arxiv.org/pdf/2210.11416.pdf TL;DR 2022 年谷歌出的文章&#xff0c;对指令微调的影响因素进行分析&#xff0c;提出了一些提升指令微调效果的方案。与该文章一起出品…

AI学习笔记四:yolov5训练自己的数据集

若该文为原创文章&#xff0c;转载请注明原文出处。 一般情况下&#xff0c;大部分人的电脑都是没有cpu的&#xff0c;cpu也是可以训练的&#xff0c;但花费的时间太长&#xff0c;实际200张图片&#xff0c;使用CPU训练300轮花了3天&#xff0c;本章记录使用云服务器来训练自…

【无废话解决bug】python dash库 127.0.0.1 拒绝了我们的连接请求

无废话。 Q: python dash库在127.0.0.1无法打开–访问本地IP时显示拒绝访问 在python3写好了代码&#xff0c;打算运行代码后在浏览器127.0.0.1查看&#xff0c;浏览器提示&#xff1a;127.0.0.1 拒绝了我们的连接请求。 A:【本解决方法对dash库问题适用&#xff0c;其他涉及…

【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化

React 基础巩固(三十四)——组件中的异步操作及优化 一、待优化的异步请求流程 通过组件的生命周期来完成网络请求&#xff0c;网络请求的异步代码直接放在组件中 import React, { PureComponent } from "react"; import { connect } from "react-redux"…

OLED透明屏的安装价格与安装步骤

OLED透明屏的安装价格因各种因素而异&#xff0c;例如屏幕尺寸、分辨率、透明度等。一般来说&#xff0c;安装OLED透明屏需要考虑到以下几个步骤&#xff1a; 准备表面&#xff1a;首先&#xff0c;需要清理屏幕表面以确保透明度。然后&#xff0c;需要钻孔以安装屏幕。 安装框…

Java在线OJ项目(一)、多进程编程实现 做题代码的编译和运行

在线OJ项目&#xff08;一&#xff09;、多进程编程实现 做题代码的编译和运行 一、回顾线程和进程二、进程比线程的优势三、多进程编程样例四、多进程思想 实现对代码 的编译 以及 运行两个功能CommandUtil 由于我们是在线oj&#xff0c;所以得编译用户的代码不仅编译 还需要 …

TEE GP(Global Platform)安全认证方案

TEE之GP(Global Platform)认证汇总 一、安全认证介绍 GlobalPlatform的安全认证计划通过独立的安全评估&#xff0c;确认安全组件是否符合通用标准认可的Protection Profile。它确保安全组件满足为特定服务定义的所需安全级别&#xff0c;使服务提供商能够自信有效地管理风险并…

技术干货|详解威胁情报在WAF类产品中如何发挥最大价值?

在产业互联网发展的过程中&#xff0c;企业也将面临越来越多的安全风险和挑战&#xff0c;威胁情报在企业安全建设中的参考权重大幅上升。早期安全产品对威胁的鉴定是“一维”的&#xff1a;鉴定文件是黑&#xff08;恶意文件&#xff09;、白&#xff08;正常文件&#xff09;…

数据结构初阶--带头双向循环链表

目录 一.带头双向循环链表的定义 二.带头双向循环链表的功能实现 2.1.带头双向循环链表的定义 2.2.带头双向循环链表的结点创建 2.3.带头双向循环链表的初始化 2.4.带头双向循环链表的打印 2.5.带头双向循环链表的判空 2.6.带头双向循环链表的尾插 2.7.带头双向循环链…

要做接口并发性能测试,总得先学会分析吧!

引言 这篇是我3月份在公司内部做的技术分享内容&#xff0c;由于我在公司内部分享的内容较多以及一些特殊性&#xff0c;我摘取了接口并发测试从设计思路整理→测试方案设计→设计分析→代码编写这套流程&#xff08;我不会承认我把40多页PPT的内容都放在这篇博文里&#xff0…

高压放大器在无线电能传输中的作用和用途

高压放大器是一种电子放大器&#xff0c;主要用于放大输入信号的幅度&#xff0c;通过输出端输出一个较大的电压信号&#xff0c;以达到强化原始信号的功能。在无线电能传输中&#xff0c;高压放大器扮演着非常重要的角色。本文将从无线电能传输的定义、高压放大器的特性以及高…

mysql数据备份与还原进阶操作

创建以下表 创建普通用户backup并给权限 备份数据库school到/backup目录 mysqldump -u backup -p school > /backup/school.sql备份MySQL数据库为带删除表的格式&#xff0c;能够让该备份覆盖已有数据库而不需要手动删除原有数据库 mysqldump -u backup -p --add-drop-d…

mysql mha高可用

目录 1.MHA是什么以及作用 2.工作原理 3.案例 1.MHA是什么以及作用 MHA(Master High Availability) MySQL高可用环境下故障切换和主从复制的软件 MHA 的出现就是解决MySQL单点故障 MySQL故障切换过程中 MHA能做到0-30秒内自动完成故障切换操作 MHA能在故障切换的过程中最大程…

行业追踪,2023-07-26,如果主力不骗人,化工原料和磷化工有第一波机会

自动复盘 2023-07-26 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

1.java入门(基础概念与常识)

文章目录 1.1.java语言有哪些特点&#xff1f;1.2.关于JVM JDK和JRE最详细通俗的解答1.2.1JVM1.2.2 JDK和JRE 1.3. Oracle JDK 和 OpenJDK 的对比1.4. Java 和 C的区别?1.5. import java 和 javax 有什么区别&#xff1f;1.6. 为什么说 Java 语言“编译与解释并存”&#xff1…

Docker仓库

Docker仓库 一、docker Harbor简介 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。Harbor以 Docker 公司开源的 Registry 为基础&#xff0c;提供了图形管理 UI 、基于角色的访问控制(Rol…

Python 基础(十八):异常处理

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、异常是什么&#xff1f;二、异常处理的基本语法三、捕获特定的异常类型四、finall…

P3183 [HAOI2016] 食物链

题目描述 如图所示为某生态系统的食物网示意图&#xff0c;据图回答第 1 小题 现在给你 n 个物种和 m 条能量流动关系&#xff0c;求其中的食物链条数。物种的名称为从 1 到 n 编号 M 条能量流动关系形如 1,2,3​,…,am−1​,bm−1​,am​,bm​。其中 ai​ 和 bi​ 表示能量从物…