PanDas笔记

文章最后更新时间:2024-10-25 20:12:21某些文章具有时效性,若有错误或已失效,请在下方 留言或联系 梦幻屋

1.1通过key:list的字典形式创建

panda怎样读写表格数据文件

PanDas笔记-梦魂博客

引入pandas库

import pandas from pd

读取txt文件

PanDas笔记-梦魂博客

skiprows表示从第五行显示

第2篇:DataFrame

第1部分:DataFrame简介

PanDas笔记-梦魂博客
  • 区别:

series,只是一个一维数据结构,它由index和value(最基本元素)组成。 dataframe,是一个二维结构,除了拥有index和value之外,还拥有column。

  • 联系:

dataframe由多个series组成,无论是行还是列,单独拆分出来都是一个series。

第2部分:DataFrame的创建

DataFrame 是最常用的 Pandas 对象,与 Series 一样,DataFrame 支持多种类型的输入数据:

  • 方式1:字典套Series
  • 方式2:字典套列表
  • 方式3:列表套字典
  • 方式4:列表套列表(二维数组)
  • 方式5:DataFrame.from_dict
  • 方式6:DataFrame.from_record
  • 方式7:文件中读取

第1篇:pandas入门及Series介绍

第1部分:Pandas概览

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

  • 与 SQL 或 Excel 表类似的,含异构列的表格数据;
  • 有序和无序(非固定频率)的时间序列数据;
  • 带行列标签的矩阵数据,包括同构或异构型数据;
  • 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。 Pandas 的主要数据结构是 Series(一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。对于 R 用户,DataFrame 提供了比 R 语言 data.frame 更丰富的功能。Pandas 基于 NumPy 开发,可以与其它第三方科学计算支持库完美集成。

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

  • 处理浮点与非浮点数据里的缺失数据,表示为 NaN;
  • 大小可变:插入或删除 DataFrame 等多维对象的列;
  • 自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;
  • 强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;
  • 把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;
  • 基于智能标签,对大型数据集进行切片、花式索引、子集分解等操作;
  • 直观地合并(merge)、连接(join)数据集;
  • 灵活地重塑(reshape)、透视(pivot)数据集;
  • 轴支持结构化标签:一个刻度支持多个标签;
  • 成熟的 IO 工具:读取文本文件(CSV 等支持分隔符的文件)、Excel 文件、数据库等来源的数据,利用超快的 HDF5 格式保存 / 加载数据;
  • 时间序列:支持日期范围生成、频率转换、移动窗口统计、移动窗口线性回归、日期位移等时间序列功能。 这些功能主要是为了解决其它编程语言、科研环境的痛点。处理数据一般分为几个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想工具。

其它说明:

  • Pandas 速度很快。Pandas 的很多底层算法都用 Cython 优化过。然而,为了保持通用性,必然要牺牲一些性能,如果专注某一功能,完全可以开发出比 Pandas 更快的专用工具。
  • Pandas 是 statsmodels 的依赖项,因此,Pandas 也是 Python 中统计计算生态系统的重要组成部分。
  • Pandas 已广泛应用于金融领域。
  • float
  • int
  • bool
  • datetime64[ns]

第2部分:数据结构

.

andas两大核心数据结构:SeriesDataFrame

|维数|名称|描述|数据表| |-|-|-|-| |1|Series|带标签的一维同构数组|一列或一行| |2|DataFrame|带标签的,大小可变的,二维异构表|一个sheet表或一个table|

  • Series是一种一维数据结构,每一个元素都带有一个索引,其中索引可以为数字或字符串。其基本数据结构为索引列和数据列。
  • Dataframe是一种二维数据结构,数据以表格形式(与excel类似)存储,有对应的行和列。其基本数据结构为索引列和多列数据,即Dataframe的由多个Series构成。

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

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

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

大小可变和数据复制

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

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

数据类型介绍

Pandas 的数据类型是指某一列的里所有的数据的共性,如果全是数字那么就是类型数字型,其中一个不是数据那么就没法是数字型了。我们知道 Pandas 里的一列可以由 NumPy 数组组成,事实上大多 NumPy 的数据类型就是 Pandas 的类型,Pandas 也会有自己特有的数据类型。

主要的数据类型

  • float
  • int
  • bool
  • datetime64[ns]
  • datetime64[ns, tz]
  • timedelta64[ns]
  • timedelta[ns]
  • category
  • object
  • string 新功能,还在实验阶段

默认的数据类型是 int64 和 float64,文字类型是 object。

和 python、NumPy 类型的对应关系:

|Pandas 类型|Python 类型|NumPy类型|使用场景| |-|-|-|-| |object|str or mixed|string, unicode, mixed types|文本或者混合数字| |int64|int|int, int8, int16, int32, int64, uint8, uint16, uint32, uint64|整型数字| |float64|float|float, float16, float32, float64|浮点数字| |bool|bool|bool_|True/False 布尔型| |datetime64[ns]|nan|datetime64[ns]|日期时间| |timedelta[ns]|nan|nan|两个时间之间的距离,时间差| |category|nan|nan|有限文本值,枚举|

pandas特有数据类型

DatetimeTZDtype 带有时区的日期时间格式。

查看数据及其类型

user_info

type(user_info)

查看某列数据及其类型

user_info.age

type(user_info.loc[‘Tom’, :]) # pandas.core.series.Series

第3部分:Series

Series是一个带有名称索引的一维数组,但与传统数组中元素类型必须相同不一样的是,Series中的元素类型可以不同,在Series中包含的数据类型可以是整数、浮点、字符串、Python对象等,这一点与Python中的列表比较类似,但与列表不同的是,列表只能通过数字索引取值,而Series可以通过自定义索引取值,从这一点来看Series与字典类似。

pandas.Series(data=None, index=None, dtype=None, name=None, copy=False)

参数解释:

  • data:支持以下数据类型:
  • Python 字典
  • 多维数组
  • 标量值(如,5)
  • index:索引,类似数组或列表,值必须是可哈希的,并且与“data”具有相同的长度。允许使用非唯一索引值。将默认为RangeIndex(0,1,2,…,n)(如果未提供)。如果Index和字典同时提供,index将会覆盖字典的keys。
  • dtype: str,numpy.d类型,或ExtensionType,可选输出序列的数据类型。如果未指定,则将从“data”推断。
  • name:Series的名称。
  • copy: bool,默认为False,是否对输入数据进行复制。

1. Series的创建

方式一:通过列表或数组方式创建

user_age = pd.Series(data=[18, 30, 25, 40])
user_age

user_age.index = ["Tom", "Bob", "Mary", "James"] # 加索引
user_age.index.name = "name"  # 索引加名字
user_age.name="user_age_info"  # series加名字
user_age

user_age = pd.Series(data=[18, 30, 25, 40], index=["Tom", "Bob", "Mary", "James"], name='user_age_info')
user_age
data = {"Tom": 18, "Bob": 30, "Mary": 25, "James": 40}
user_age = pd.Series(data=data, name="user_age_info")
user_age

注意:data 为字典,且未设置 index 参数时,如果 Python 版本 >= 3.6 且 Pandas 版本 >= 0.23,Series 按字典的插入顺序排序索引。

Python < 3.6 或 Pandas < 0.23,且未设置 index 参数时,Series 按字母顺序排序字典的键(key)列表。

data = {"Tom": 18, "Bob": 30, "Mary": 25, "James": 40}
user_age = pd.Series(data=data, name="user_age_info", dtype=float)
user_age
user_age = pd.Series(data=data, name="user_age_info", dtype=float)

Series属性

Series常见的属性包含:

  • shape: Series的形状
  • index: Series的索引
  • values: Series的数据值。ndarray类型
  • name: Series的名称
  • dtype: Series的数据类型

对于一个Series,其中最常用的属性为值(values),索引(index),名字(name),类型(dtype)。

3. Series的方法

PanDas笔记-梦魂博客

3.1 基本方法

  • head(n): 查看Series的前n个元素,默认n为5。
  • tail(n): 查看Series的后n个元素,默认n为5。
  • unique(): 返回Series中不重复的元素。
  • nunique(dropna=False):返回Series中不重复的元素个数。
  • isna(): 判断元素是否是缺失值。
  • isnull(): 和isna()功能相同。
  • dropna(inplace=False):删除缺失值。
  • isin(values):成员运算,values为set或者list-like类型,判断series中每个元素是否是values的成员。
  • sort_index(ascending=False, inplace=False): 对索引排序
  • sort_values(ascending=False, inplace=False):对值排序。
  • idmax(): 返回最大值的索引。
  • idmin(): 返回最小值的索引。
  • nlargest(): 返回n个最大的值。
  • nsmallest(): 返回n个最小的值。
  • count(): 返回非缺失值元素个数。
  • value_counts(ascending=False,dropna=True):统计数据。
  • clip(lower, upper, inplace=False): 对Series在lower-upper范围进行截断,小于lower的替换为lower,大于upper的替换为upper。
  • replace(to_replace, value=None, inplace=False): 对Series中指定值进行替换。
  • where(cond, other=np.nan, inplace=False): 对不满足cond的元素替换为other。
  • add_prefix(prefix): 统一加前缀。
  • add_suffix(suffix): 统一加后缀。
  • reset_index(drop=False, name=None, inplace=False): 重置索引,当drop为False时返回DataFrame。
  • to_frame(name=None):将Series转换为DataFrame。
  • append(toappend, ignoreindex=False, verify_integrity=False):将两个Series进行合并。
import pandas as pd
import numpy as np

# 创建一个包含数字和特殊值的Series
data = [1, 2, np.nan, 4, 5, 5, 6, 7, 8, 9, 10]
s = pd.Series(data)

# 查看Series的前5个元素
print("Head of Series:")
print(s.head())

# 查看Series的后5个元素
print("\nTail of Series:")
print(s.tail())

# 返回Series中不重复的元素
print("\nUnique values:")
print(s.unique())

# 返回Series中不重复的元素个数
print("\nNumber of unique values:")
print(s.nunique())

# 判断元素是否是缺失值
print("\nMissing values check:")
print(s.isna())

# 删除缺失值
print("\nSeries without missing values:")
print(s.dropna())

# 判断series中每个元素是否是特定值的成员
print("\nMembers of [1, 5, 9]:")
print(s.isin([1, 5, 9]))

# 对索引排序
print("\nSeries sorted by index:")
print(s.sort_index())

# 对值排序
print("\nSeries sorted by values:")
print(s.sort_values())

# 返回最大值的索引
print("\nIndex of max value:")
print(s.idxmax())

# 返回最小值的索引
print("\nIndex of min value:")
print(s.idxmin())

# 返回5个最大的值
print("\n5 largest values:")
print(s.nlargest(5))

# 返回5个最小的值
print("\n5 smallest values:")
print(s.nsmallest(5))

# 返回非缺失值元素个数
print("\nCount of non-missing values:")
print(s.count())

# 统计数据频率
print("\nValue counts:")
print(s.value_counts())

# 对Series在1-9范围进行截断
print("\nSeries clipped between 1 and 9:")
print(s.clip(1, 9))

# 对Series中指定值进行替换
print("\nSeries with 5 replaced by -1:")
print(s.replace(5, -1))

# 对不满足cond的元素替换为np.nan
print("\nSeries with values less than 5 replaced by NaN:")
print(s.where(s >= 5))

# 统一加前缀
print("\nSeries with prefix 'value_':")
print(s.add_prefix('value_'))

# 统一加后缀
print("\nSeries with suffix '_foo':")
print(s.add_suffix('_foo'))

# 重置索引
print("\nSeries reset index:")
print(s.reset_index())

# 将Series转换为DataFrame
print("\nSeries to DataFrame:")
print(s.to_frame(name='Value'))

# 将两个Series进行合并
print("\nSeries appended with another Series:")
s2 = pd.Series([11, 12, np.nan, 14])
print(s.append(s2, ignore_index=True))

3.2 数字类型方法

  • max(): 最大值
  • min(): 最小值
  • sum(): 和
  • var(): 方差
  • std(): 标准差
  • median(): 中位数
  • mean(): 平均值
  • mad(): 平均绝对偏差,每个数据点与平均值之间的平均距离。
  • abs(): 绝对值
  • quantile(): 分位数函数
  • cummax(): 累计最大值
  • cumsum(): 累计和
  • cumprod(): 累计乘积
  • mode():众数

3.3 字符串类型方法

pandas中字符串类型Series通过Series.str.方法进行调用,常用的方法如下:

PanDas笔记-梦魂博客

通过以上我们可以知道,pandas中字符串Series几乎具有Python字符串所有的功能,从这里就可以看出pandas的强大之处了。 关于字符串类型的方法,我们将在之后文本数据处理章节中进行介绍。

3.4 分类数据方法

分类数据直白来说就是取值为有限的,或者说是固定数量的可能值。例如:性别、血型,通过Series.cat.方法名来调用。具体使用将在后面分类数据处理章节进行详细介绍。

3.5 时间序列数据方法

关于时间数据类型,pandas中也对其有针对性的处理方法。时间数据类型通过Series.dt.方法名来调用。具体使用将在后面时间数据处理章节进行详细介绍。

3.6 画图

PanDas笔记-梦魂博客

4. Series的增删改查

4.1 访问数据元素

访问Series数据元素有3种方式:

  • 索引
  • 序号
  • 布尔
user_age['Wade'] = 39
user_age['Michael'] = 50

pandas中添加数据元素的方法与字典类似,可以直接通过[索引] = value进行添加。如果想要添加多个元素,可以将其转换为Series,采用上面介绍的append方法对其进行合并。

user_age['Wade'] = 38  # 按索引修改

pandas的Series对数据元素进行修改,可以直接使用Series[索引/序号] = new_valuezip样的方式。

user_age.drop('Michael')   # 不会改变原始数据
user_age.drop('Michael', inplace=True)   # 改变原始数据
user_age.drop(['Tom', 'Bob'], inplace=True)   # 一次性删除多个元素

pandas中想要删除Series的数据元素,我们可以采用del Series[索引]这样的方法,当然,也可以使用内置的drop方法对其进行删除。

data = {
"col1": pd.Series([],index),
"col2": pd.Series([],index),
"col3": pd.Series([],index)
}

这种方式有以下特点:

  • 字典的key为列名
  • 字典的value为Series
  • 若DataFrame没有指定index和columns,则以字典的key为列,Series的index为索引
  • 若DataFrame指定了index或columns,会根据指定的columns去字典中筛选对应的key,根据指定的index去Series中筛选对应的索引,并将筛选的结果放入到生成的DataFrame中
data = {
    "name": pd.Series(["Tom", "Bob", "Mary",    "James", "Yafei"]),
    "age": pd.Series([18, 30, 25, 40, 22]),
    "city": pd.Series(["北京", "上海", "广州", "深圳", "晋城"])
}
user_info = pd.DataFrame(data)
user_info
# 指定索引(index)
index = ["Tom", "Bob", "Mary", "James", "Yafei"]
data = {
    "age": pd.Series([18, 30, 25, 40, 22], index=index),
    "city": pd.Series(["北京", "上海", "广州", "深圳", "晋城"],index=index)
}
user_info = pd.DataFrame(data)
user_info

当Series指定索引,DataFrame中也指定索引时会发生什么呢?

# 指定索引(index)
index = ["Tom", "Bob", "Mary", "James", "Yafei"]
data = {
    "age": pd.Series([18, 30, 25, 40, 22], index=index),
    "city": pd.Series(["北京", "上海", "广州", "深圳", "晋城"],index=index)
}
user_info = pd.DataFrame(data, index=["Tom","James", "Yafei"])
user_info

当每列的Series和DataFrame都指定索引且不相同时,DataFrame会根据传递的索引去每个Series中寻找在指定索引范围的值,相当于根据索引对每一列Series进行筛选操作。 请看下面这个示例,age列和city列为Series对象,但是没有指定index,这是index为默认值,即0-Series长度-1的数字索引,下例中的索引为0-4,。而创建DataFrame时指定的index为name列表,此时会去Series中寻找index属于name列表的元素添加到DataFrame中,发现age列和city列的Series的索引与name列表交集为空,故结果中name索引对应的age和city均为空值。

data = {
    "age": pd.Series([18, 30, 25, 40, 22]),
    "city": pd.Series(["北京", "上海", "广州", "深圳", "晋城"])
}
user_info= pd.DataFrame(data, index=["Tom", "Bob", "Mary", "James", "Yafei"])
user_info
data['age'].index

可以看到当列索引和DataFrame的索引同时指定时,若不一致的情况下会发生冲突,此时生成的DataFrame会以指定的index为准。 那么,我们如何将DataFrame的索引设置为name列呢?

user_info.index = ["Tom", "Bob", "Mary", "James", "Yafei"]
user_info

上面说了索引的设置时候的注意点,那么columns也是一样的,当传入的data指定的列名与columns不一致时,生成的DataFrame的列会以指定的columns为准,并去data中去查找与columns存在交集的列,并将其放入到DataFrame中。也可以理解为起到了筛选data中列数据的作用。

padas基础操作

pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。以下是一些 pandas 的基础操作示例:

  1. 导入 pandas 库:
import pandas as pd

“`Plain Text pd[[a,b]]

Plain Text pd.iloc[[a,b]]

- loc

  - 显示索引区行

  - 带""的

- iloc

  - 隐视索引区行

  - 不带""的



---

## Pandas 索引与切片

`pandas` 是 Python 中强大的数据分析库,提供了灵活的数据结构和操作方法。在处理数据时,正确理解和运用索引及切片是非常重要的。

### 一、创建 DataFrame 时索引不一致的情况

python import pandas as pd

data = { “age”: pd.Series([18, 30, 25, 40, 22]), “city”: pd.Series([“北京”, “上海”, “广州”, “深圳”, “晋城”]) }

userinfo = pd.DataFrame(data, index=[“Tom”, “Bob”, “Mary”, “James”, “Yafei”]) print(userinfo)

当创建 `DataFrame` 时指定的 `index` 为 `name` 列表,此时会去 `Series` 中寻找 `index` 属于 `name` 列表的元素添加到 `DataFrame` 中。如果 `age` 列和 `city` 列的 `Series` 的索引与 `name` 列表交集为空,那么结果中 `name` 索引对应的 `age` 和 `city` 均为空值。

python print(data[‘age’].index)

可以看到当列索引和 `DataFrame` 的索引同时指定时,若不一致会发生冲突,此时生成的 `DataFrame` 会以指定的 `index` 为准。

### 二、设置 DataFrame 的索引

python userinfo.index = [“Tom”, “Bob”, “Mary”, “James”, “Yafei”] print(userinfo)

通过上述方式,可以将 `DataFrame` 的索引设置为指定的列表。

### 三、关于 `columns` 的注意点

`columns` 的处理方式与 `index` 类似。当传入的 `data` 指定的列名与 `columns` 不一致时,生成的 `DataFrame` 的列会以指定的 `columns` 为准,并从 `data` 中查找与 `columns` 存在交集的列,将其放入到 `DataFrame` 中。这也可以理解为起到了筛选 `data` 中列数据的作用。

### 四、`pandas` 中的索引方式

- `loc`:基于标签(显示索引)进行索引和切片,索引值需要带引号。

- `iloc`:基于整数位置(隐式索引)进行索引和切片,索引值不带引号

## 缺失值

### 两种丢失数据

- None

  - none对象类型

- np.nan(nan)

  - nan浮点型



# 重写

## 1.Dataframe

### 通过key:list的字典形式创建

Python data = { “name”: [“Alice”, “Bob”, “Charlie”], “age”: [25, 30, 35] } df = pd.DataFrame(data) print(df)

### 通过列表字典形式进行创建

Python data = [ {“name”: “Alice”, “age”: 25}, {“name”: “Bob”, “age”: 30}, {“name”: “Charlie”, “age”: 35} ] df = pd.DataFrame(data) print(df)

### 指定二维数组和列名进行创建

Python data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] columns = [‘A’, ‘B’, ‘C’] df = pd.DataFrame(data, columns=columns) print(df)

### 读取xlsx数据

Python import pandas as pd

读取 xlsx 文件

df = pd.readexcel(‘yourfile.xlsx’,engine=”openpyxl”) print(df)

上述代码中,`'your_file.xlsx'`需要替换为您实际的 Excel 文件路径。Pandas 的`read_excel`函数可以方便地将 Excel 文件中的数据读取为`DataFrame`格式,以便进行后续的数据处理和分析。



### 查看前几行和后尾行代码

Python

查看前 5 行数据

df.head()

查看前 10 行数据

df.head(10)

查看后 5 行数据

df.tail()

查看后 10 行数据

df.tail(10)

### 查看行数和shape

Python

查看行数

len(df)

查看 DataFrame 的形状(行数和列数)

df.shape

### 查看字符类型

Python df.dtypes()

### 查看基本信息

Python df.info().

### 查看描述性统计数据

Python a1.describe()

### 随机采样几行数据

Python a1.sample(5)

### 设置索引和把索引变成普通列

索引变成列

Python df.set.index(参数)

列变为普通的

Python a1.reset_index()

索引可以是多列

Python df.set_index([参数1,参数2])

## pandas怎么用ioc查询datafarame数据

![image.png](https://tc-cdn.flowus.cn/oss/4dbad78d-723e-4d3e-aa22-74e74e7e8d07/image.png?time=1729826100&token=478dbed198616b6fac3f5e849fc16af27098eeca465fbca8f5b4833e62c2f60a&role=free)

### df["参数"],可以按列名查询一列,返回series

![image.png](https://tc-cdn.flowus.cn/oss/af675c81-bede-43bf-b45e-c15ff13608a8/image.png?time=1729826100&token=562e07d8858816a141e93f05209f07ff0b065d64028284985ea5ffd39fb4904e&role=free)

### df["参数1",[参数2]]可以按照多列查询,返回dataframe

![image.png](https://tc-cdn.flowus.cn/oss/a2e0798c-939f-413f-840b-05e16870beb9/image.png?time=1729826100&token=d97eca84742c32fb78d30cf4e5bdd3ca4fb2b261d8b216ec15958efa9aa2651b&role=free)





### df.loc["参数"]可以按照行标签返回多行,返回series

![image.png](https://tc-cdn.flowus.cn/oss/3bb07f7c-7fa2-4463-8466-99b8054917f6/image.png?time=1729826100&token=16ed6677dfa588ef6310ed60ff7970f29986e36da34ff65d4ff87f3a9639bdd0&role=free)

### df.loc["参数1","参数"]]可以按照行标签查询多行,返回dataframe

![image.png](https://tc-cdn.flowus.cn/oss/bcfbf16f-e1c0-45ad-94ab-5548aaad3194/image.png?time=1729826100&token=1964c8cea526ae60941e722ae67a0cd196dd1157924ff8dd53a22f638c7fb1a8&role=free)

### df.loc["行标签",列标签]同时使用行标签和列标签,返回一个值

![Snipaste_2024-10-14_13-07-16.png](https://tc-cdn.flowus.cn/oss/1185fea5-d448-4f1e-84b4-f494c0bd354e/Snipaste_2024-10-14_13-07-16.png?time=1729826100&token=9db6f492ae3bf354f9ad5b83d95244131f830c149ef3069d50a1a09c7acf3e46&role=free)



### df.iloc[int参数]可以按照整行索引查询一行,返回Series

![image.png](https://tc-cdn.flowus.cn/oss/c9d1a38b-9316-4419-a010-cd12c4a7dbc8/image.png?time=1729826100&token=6d04b67f36c722a89f7ee79f756547f165077570ebafe7cc0e5788be4b0f0fbd&role=free)

### df.iloc[[int参数1,int参数2]]可以按照整行索引查询多行,返回dataframe

![image.png](https://tc-cdn.flowus.cn/oss/82baafb4-c09b-49fc-9f88-44ad1a12e18b/image.png?time=1729826100&token=8f6472243537427358edf49acd314ff82b9656cd76e5e008821a74d6fd046541&role=free)

### df[参数1,参数2]同时准备了一个行索引和一个列索引,返回一个值

![image.png](https://tc-cdn.flowus.cn/oss/62f96775-7566-448e-a0cd-1d6ba191c758/image.png?time=1729826100&token=1734a0a596df28607fb71c52ab3e30bac76e2da78f77bc0021d2b6453400949a&role=free)

### df[["参数1","参数2"],["参数1","参数2"]]可以指定行标签和裂标签,查询子集的Dataframe

![image.png](https://tc-cdn.flowus.cn/oss/632cd48c-2e9e-4a4b-af39-48b3412b547e/image.png?time=1729826100&token=7f526d84ca70a016b4af59def459feab5cc9b995083cb0912c872119567ec594&role=free)

![image.png](https://tc-cdn.flowus.cn/oss/85355371-ca5b-473d-9fcc-81f4d2361aca/image.png?time=1729826100&token=3faa4fe87539634ef8416ffde21f80e8b93fe340b5f687dc664859a119b85346&role=free)

## pandas怎样使用条件查询数据

![image.png](https://tc-cdn.flowus.cn/oss/407dee5a-8656-4f78-b233-46220e01746a/image.png?time=1729826100&token=83ccce04d4e574d0d7f41465e3026546840f960498194e7342487dca88ee9e07&role=free)

### 单个条件判断

![image.png](https://tc-cdn.flowus.cn/oss/f285e2d9-70f1-495f-8f15-fff49472d43b/image.png?time=1729826100&token=f0fd79b0b4022ba23ec8596d69c6e7ef1499986ee21a9c1e790d5203b6301718&role=free)

![image.png](https://tc-cdn.flowus.cn/oss/8ff7bb0e-0ec0-4543-9c58-2f38f5aef0b9/image.png?time=1729826100&token=ba41bbb381fa93e00be0700f60992a5c3a8b38ee131cfdbd72574de0cebe660f&role=free)

### 组合多个条件进行查询

![image.png](https://tc-cdn.flowus.cn/oss/7c87cb54-1495-4ada-b554-588e6ac35d74/image.png?time=1729826100&token=fa25f78d06a7d757009333ddb82eb6244df1b9fbd4338ad87589f540c346a1ad&role=free)

![image.png](https://tc-cdn.flowus.cn/oss/e8783d3c-e71b-4634-a92d-fcfb7e9970db/image.png?time=1729826100&token=3208152910011a2d381c73cc04f480e460d1b222a5c3aaad08d38f5bf29b2554&role=free)

![image.png](https://tc-cdn.flowus.cn/oss/a580cb4c-b803-4dd2-99ed-efe32e1d4ead/image.png?time=1729826100&token=640b2efd637ea8e2c693190622e72895164ad453b4dadde3b963887ee006d32a&role=free)

![image.png](https://tc-cdn.flowus.cn/oss/fd5cd4b7-71b9-4e7c-88d2-6a134e09bdc2/image.png?time=1729826100&token=608f7cc5546190f5fecbf4d3449bbd41ce176da72206358a538710ba6253ac28&role=free)

![image.png](https://tc-cdn.flowus.cn/oss/c98890ee-52d0-4c2c-b865-a200c9243ea3/image.png?time=1729826100&token=ad70f4135ed56df57bc0722332c7ca1785c45f19e55869e24d9128fe4925784a&role=free)

### 使用series的isin函数,实现元素是否在列表

Python import pandas as pd

创建一个DataFrame

df = pd.DataFrame({ ‘A’: [1, 2, 3, 4], ‘B’: [5, 6, 7, 8] })

检查列’A’中的值是否在列表[3, 5, 10]中

mask = df[‘A’].isin([3, 5, 10]) print(df) print(mask)

相当与在A的那一例查找是否有没有3.5,10这几个数,如果有就返回True,没有就返回False



![image.png](https://tc-cdn.flowus.cn/oss/bf5ce803-cd54-4f66-85a2-c7ca5f781ee8/image.png?time=1729826100&token=1d2030fe97536a4245ac3ac194351c7f00cba8796d5da9ff21c766a7c8987987&role=free)

### pandas怎么实现for循环遍地数据

![image.png](https://tc-cdn.flowus.cn/oss/ea13180f-edf8-438a-bcd9-353aa78262e7/image.png?time=1729826100&token=0a01acd63a2f27f1686a93d137670b885090e670290956a786f27222e80f586f&role=free)

在 `pandas` 中,通常不建议使用传统的 `for` 循环来遍历数据,因为 `pandas` 提供了更高效和简洁的向量化操作方式。但如果确实需要遍历数据,你可以通过以下几种方式实现:

2. 使用 `iterrows()` 方法:

Python import pandas as pd df = pd.DataFrame({ ‘A’: [1, 2, 3], ‘B’: [‘a’, ‘b’, ‘c’] }) for index, row in df.iterrows(): print(row[‘A’], row[‘B’])

3. 使用 `itertuples()` 方法:

Python for row in df.itertuples(): print(getattr(row. ‘A’), getattr(row. ‘B’))

然而,对于大多数数据处理任务,优先考虑使用 `pandas` 的内置函数和方法,例如 `apply()` 、 `map()` 等,它们能够更高效地处理数据。

例如,如果要对 `A` 列的值进行乘以 2 的操作,可以这样写:

Python df[‘A’] = df[‘A’].apply(lambda x: x * 2)

这种向量化的操作通常比使用循环更快,特别是在处理大规模数据时。

## pandas怎么样新增修改数据列



![image.png](https://tc-cdn.flowus.cn/oss/301390d7-fed0-4301-b348-1a2d071bae17/image.png?time=1729826100&token=790fba067ea6c9fdd2ce5c32dcc7c4d5bad06ea18ca49301229484dd928925dd&role=free)

### 读取数据设置索引

Python ftp = “./data/1.xlsx” df = pd.readexcel(ftp,engine=”openpyxl”) df.setindex(“排班日期”,inplace=True) df

### 直接赋值的方法新增/修改数据

#### 新增一列等于一个数字

问题:每个人的薪资,增加一千元餐厅补贴

![image.png](https://tc-cdn.flowus.cn/oss/5d56cfaf-047f-4a8c-aa49-fa2937ab94c9/image.png?time=1729826100&token=fb0d6c182f6be8f8af94c44db3c7048dd5fdd0c72eabaed7f483f6aa36562cf1&role=free)

#### 新增列等于列表

问题:怎样给每个人随机一个数字和编号

![image.png](https://tc-cdn.flowus.cn/oss/f22e45b4-2f75-47d8-b1be-60502eb703eb/image.png?time=1729826100&token=b63782971f384c550f2bbfc1fa8654c67a00733bf4afe6a3117ed46c49cfa7dc&role=free)

#### 通过计算多列得到一个新结果列

![image.png](https://tc-cdn.flowus.cn/oss/a9c7536e-b455-4006-8cde-a85182cf9955/image.png?time=1729826100&token=35883e3c7e9ed9c3e8fd6b25091b2172e123a33e30f571dc68ddd379897a7d00&role=free)

#### 通过Series的map/apply自定义函数添加新列

![image.png](https://tc-cdn.flowus.cn/oss/f3352d00-3272-4e8e-ad85-d293cab66b0c/image.png?time=1729826100&token=ab5d9b57d45fdd3ce37a2bfd79e54e4074949c79f02153c9f230947dd4384f24&role=free)





#### 使用Dataframe.apply通过多列值进行计算新列

![Snipaste_2024-10-14_19-00-36.png](https://tc-cdn.flowus.cn/oss/eb838aeb-edfd-4e12-b5e6-2e7410955d11/Snipaste_2024-10-14_19-00-36.png?time=1729826100&token=f4dda7411cdcddfaae1ec01ba9253110d490427ed6f4e2a1f6219163cd719ad9&role=free)

## pandas链式修改和按条件修改数据

![Snipaste_2024-10-14_19-04-31.png](https://tc-cdn.flowus.cn/oss/9965cff1-b86d-40b3-b04b-2a97474efc99/Snipaste_2024-10-14_19-04-31.png?time=1729826100&token=1ee662091f5486e14103f8647d75dd90dc6b0db2b1b35ac049caa2b95f0ce266&role=free)



![image.png](https://tc-cdn.flowus.cn/oss/a906057a-b09c-4717-8e42-f5d5273d2fa7/image.png?time=1729826100&token=db0ac26b4fb8a55edd6dea7556a433aaad0dd8bea9d24f5daefba716c549e679&role=free)

![image.png](https://tc-cdn.flowus.cn/oss/fe50cf05-f2dd-417d-a45b-97d50d0576c7/image.png?time=1729826100&token=77fd6e15c896bf45f9eba74b9ce71570403488e642d2b050d85a1f0e635dcc82&role=free)

![image.png](https://cdn2.flowus.cn/fe-web-app-images/resize-left.svg)

![image.png](https://cdn2.flowus.cn/fe-web-app-images/resize-left.svg)

![image.png](https://cdn2.flowus.cn/fe-web-app-images/resize-left.svg)

## pandas怎么样给表格数据同时增加多列

![image.png](https://cdn2.flowus.cn/fe-web-app-images/resize-left.svg)

![image.png](https://flowus.cn/preview/665ad00d-83e3-40af-a37d-28c30685db27)



![image.png](https://cdn2.flowus.cn/fe-web-app-images/resize-left.svg)

![image.png](https://cdn2.flowus.cn/fe-web-app-images/resize-left.svg)



## pandas 怎么删除数据行和数据列

![image.png](https://cdn2.flowus.cn/fe-web-app-images/resize-left.svg)

### 删除列数据

#### 删除单个列数据

Python

df = pd.DataFrame({ ‘数字’: [1, 2, 3], ‘字母’: [‘a’, ‘b’, ‘c’] })

df df.drop(“数字”,axis=1)

#### 删除多列数据

Python

df = pd.DataFrame({ ‘数字’: [1, 2, 3], ‘字母’: [‘a’, ‘b’, ‘c’] })

df df.drop([“数字”,”字母”],axis=1)

### 相当于筛选出目标列

![image.png](https://cdn2.flowus.cn/fe-web-app-images/resize-left.svg)

### 删除列并返回Series

![image.png](https://cdn2.flowus.cn/fe-web-app-images/resize-left.svg)

### 按索引删除行

Python

df = pd.DataFrame({ ‘数字’: [1, 2, 3], ‘字母’: [‘a’, ‘b’, ‘c’] })

df df.drop(“数字”,axis=0)

### 按索引删除多行

Python

df = pd.DataFrame({ ‘数字’: [1, 2, 3], ‘字母’: [‘a’, ‘b’, ‘c’] })

df df.drop([“数字”,”字母”],axis=0)

![image.png](https://flowus.cn/preview/1271f37a-25ac-4a2a-bb2a-1715a9a2b601)

### 先查询数据然后使用索引删除行数据

![image.png](https://flowus.cn/preview/41550c48-4d71-4bce-97eb-e2ee13022b6d)

### 检测重复数据

Python

dfnew.duplicated() #返回是True 和False dfnew[df_new.duplicated()]

根据局部字段,判断重复行,只要名字一样就认为重复

dfnew[dfnew.duplicated(subset=”数字”)]

### 删除重复数据 

Python dfnew.dropduplicates(subset=”字母”) “`

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容