当前位置: 首页 > news >正文

【pandas】.loc常用操作

.loc是pandas中的索引器,主要用于Series和Dataframe上,基于标签(行标签和列标签)选取数据,可以进行行和列的切片操作,支持单个标签,标签列表,条件表达式等

在Dataframe上的操作:

先创建个Dataframe:

import pandas as pd# 创建一个 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35],'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print(df)

输出:

      Name  Age         City
0    Alice   25     New York
1      Bob   30  Los Angeles
2  Charlie   35      Chicago

行操作相关

1、选取某行数据

# 选取标签为0的行
row_0 = df.loc[0]
print(row_0)

输出:

Name        Alice
Age            25
City     New York
Name: 0, dtype: object

.loc[0] 表示选取标签为 0 的那一行,返回的是一个 Series 对象

2、选取连续的多行数据

可以使用切片选取连续的行:

# 选取标签从 0 到 1 的行(包含 1)
rows_0_to_1 = df.loc[0:1]
print(rows_0_to_1)

输出:

    Name  Age         City
0  Alice   25     New York
1    Bob   30  Los Angeles

使用切片0:1选取行标签0-1的连续两行数据,返回的是一个Dataframe对象。

注意,.loc 使用标签的“闭区间”特性,也就是说切片操作包含结束标签(即 1 也会被选取)。

3、选取分离的多行数据

如果想一次性选取分离的多个行,可以将行标签放在列表里传递给.loc:

# 选取标签为 0 和 2 的行
rows_0_2 = df.loc[[0, 2]]
print(rows_0_2)

输出:

      Name  Age         City
0    Alice   25     New York
2  Charlie   35      Chicago

.loc[[0, 2]]表示一次性选取标签为0和2的两行数据,返回的是一个Dataframe对象。

4、通过条件筛选特定的行

可以根据条件来选择特定的行:

# 选择 'Age' 大于 30 的行
rows_age_above_30 = df.loc[df['Age'] > 30]
print(rows_age_above_30)

输出:

      Name  Age     City
2  Charlie   35  Chicago

df['Age'] > 30会返回一个[False, False, True]的bool列表,.loc根据这个bool列表选取行数据,不管返回的数据有一行还是多行,返回的是一个Dataframe对象。

5、修改某行的数据

可以通过 .loc 修改某一行的数据

# 修改标签为 1 的行的 'Age' 为 32
df.loc[1, 'Age'] = 32
print(df)

输出:

      Name  Age         City
0    Alice   25     New York
1      Bob   32  Los Angeles
2  Charlie   35      Chicago

.loc[1, 'Age']锁定行标签为1列标签为‘Age’的单元数据,修改是直接作用在原Datafrmae对象上的。

总结

  • .loc[row_label] 用于按行标签选择特定行。
  • .loc[[row_label1, row_label2]] 用于选择多个行。
  • .loc[start:end] 用于选择连续的行(包含结束标签)。
  • .loc[condition] 用于根据条件选择行。

列操作相关

1、按列名选取某列数据

# 选取 'Age' 列
age_column = df.loc[:, 'Age']
print(age_column)

输出:

0    25
1    30
2    35
Name: Age, dtype: int64

.loc[:, 'Age'] 中,: 表示选择所有行,'Age' 则表示选取列名为 'Age' 的列,返回的是一个 Series 对象

2、选取多列

一次性选取多个列,可以将列名列表传递给 .loc:

# 选取 'Name' 和 'City' 列
name_city_columns = df.loc[:, ['Name', 'City']]
print(name_city_columns)

输出:

      Name         City
0    Alice     New York
1      Bob  Los Angeles
2  Charlie      Chicago

3. 条件筛选行和列

结合条件筛选来选择特定的行和列:

# 选择 'Age' 大于 25 的行,并选取 'Name' 和 'City' 列
result = df.loc[df['Age'] > 25, ['Name', 'City']]
print(result)

输出:

      Name         City
1      Bob  Los Angeles
2  Charlie      Chicago

4. 修改某列的值

可以通过 .loc 修改某列的值:

# 修改 'Age' 列中,标签为 0 的值
df.loc[0, 'Age'] = 26
print(df)

输出:

      Name  Age         City
0    Alice   26     New York
1      Bob   30  Los Angeles
2  Charlie   35      Chicago

总结

  • .loc[:, 'Column_Name'] 用于按列名选取特定列。
  • .loc[:, ['Column1', 'Column2']] 可以选择多个列。
  • 你还可以结合条件筛选行,同时选择特定的列。

行列一起操作

1、按标签选择多行和多列

# 选择标签为 0 和 1 的行,以及 'Name' 和 'Age' 列
result = df.loc[0:1, ['Name', 'Age']]
print(result)

在Series上操作

.loc 也可以在 pandas.Series 上使用,功能与在 DataFrame 上类似。Series 是一种一维标签化数组,它与 DataFrame 类似,只是没有列的维度,因此 .locSeries 中主要用于根据标签选择数据或修改数据

构造一个 Series 对象:

import pandas as pd# 创建一个 Series 对象
data = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(data)

输出:

a    10
b    20
c    30
dtype: int64

1、选择单个元素

# 选择标签为 'a' 的元素
result = data.loc['a']
print(result)  # 输出:10

2、选择多个元素

# 选择标签为 'a' 和 'c' 的元素
result = data.loc[['a', 'c']]
print(result)

输出:

a    10
c    30
dtype: int64

3、在 Series 上使用条件选择

可以使用条件表达式选择符合条件的元素:

# 选择值大于 15 的元素
result = data.loc[data > 15]
print(result)

输出:

b    20
c    30
dtype: int64

4、修改 Series 中的数据

可以通过 .loc 修改 Series 中的数据

# 修改标签为 'b' 的元素为 25
data.loc['b'] = 25
print(data)

输出:

a    10
b    25
c    30
dtype: int64

5、使用 .loc 进行切片操作

和在 DataFrame 中一样,.loc 也可以用来在 Series 中进行切片操作,使用标签范围:

# 选择从 'a' 到 'b' 的切片
result = data.loc['a':'b']
print(result)

输出:

a    10
b    25
dtype: int64

与 DataFrame 的不同之处

  • 在 Series 中,.loc 主要用于基于标签的选择,而在 DataFrame 中,除了标签选择之外,还可以按列名进行选择
  • Series 只有一维数据,但你仍然可以使用标签或布尔条件来选择数据。
http://www.dtcms.com/a/358930.html

相关文章:

  • 【SpringMVC】SSM框架【二】——SpringMVC超详细
  • 【运维篇第三弹】《万字带图详解分库分表》从概念到Mycat中间件使用再到Mycat分片规则,详解分库分表,有使用案例
  • DAEDAL:动态调整生成长度,让大语言模型推理效率提升30%的新方法
  • 基于SpringBoot的电脑商城系统【2026最新】
  • 漫谈《数字图像处理》之分水岭分割
  • SystemVerilog学习【七】包(Package)详解
  • REST-assured获取响应数据详解
  • 数据结构 | 深度解析二叉树的基本原理
  • 访问Nginx 前端页面,接口报502 Bad Gateway
  • 【DeepSeek】ubuntu安装deepseek、docker、ragflow
  • 简历书写---自我评价怎么写
  • Day18_【机器学习—交叉验证与网格搜索】
  • Unity核心概念①
  • 【Linux】基础I/O和文件系统
  • PHP单独使用phinx使用数据库迁移
  • 全栈开源,高效赋能——启英泰伦新官网升级上线!
  • 快速学习和掌握Jackson 、Gson、Fastjson
  • React Native基本用法
  • 大语言模型生成的“超龄劳动者权益保障制度系统化完善建议(修订版)”
  • 下一波红利:用 #AI编程 闯入小游戏赛道,#看广告变现 模式正在崛起!
  • I2C的类比水池和大海
  • 【前端教程】DOM 操作入门专栏:从基础到实战
  • JS之刷刷
  • Langflow核心技术学习笔记(新)
  • LangChain.js 实战与原理:用 LCEL 构建可维护的 RAG / Agent 系统(含 4 套 30+ 行代码)
  • 揭开智能体架构面纱:90% 属软件工程,10% 为 AI 技术
  • Python数据分析:在Python中,reindex和set_index以及reset_index最本质的区别是什么?
  • B树与B+树的原理区别应用
  • Python 的 argparse 模块中,add_argument 方法的 nargs 参数
  • Ubuntu系统下交叉编译Android的X264库