python 数据分析 pandas dataframe 遍历方法

本文详细介绍了在Python中使用PandasDataFrame遍历数据的三种方法:按行、按列以及获取特定值(iat,at,loc,iloc)。通过实例演示了如何通过不同的索引方式访问DataFrame的数据。
部署运行你感兴趣的模型镜像

目录

1 遍历DataFrame的三种方法

3 按行遍历

3.1 第一种方法

3.2 第二种方法

4 遍历DataFrame某一列(行)数据

5 获取某一个值

5.1 DataFrame.at[行索引,列索引]获取某一个值

5.2 DataFrame.iat[默认行索引,默认列索引]获取某一个值

5.3 DataFrame.loc[行索引,列索引]获取某个值,与at不同的是,只输入某一参数,获得某一行或某一列

5.4 DataFrame.iloc[默认行索引,默认列索引]获取某个值,与iat不同的是,只输入某一参数,获得某一行或某一列:


1 遍历DataFrame的三种方法

  • iteritem()方法返回一个<class ‘method’>数据,可利用for循环获得输出
  • iterrow()方法返回一个<class ‘generator’>数据,可利用for循环获得输出
  • itertuple()方法返回一个<class ‘pandas.core.frame.Pandas’>数据,可利用getattr(row,‘列索引’)方法获得对应数据
    演示数据准备:
data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],
'year':[2000,2001,2002,2003,2004,2005],
'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame = pd.DataFrame(data)

2 按列遍历

column_indexs = []
for column_index, row_data in frame.iteritems():
    column_indexs.append(column_index)
    print(row_data)
print(column_indexs)

运行结果:
在这里插入图片描述

3 按行遍历

3.1 第一种方法

row_indexs = []
for index, row in frame.iterrows():
    row_indexs.append(index)
    print(row)
print(row_indexs)

运行结果:
在这里插入图片描述
还可以通过列名获取对应数据

for index, row in frame.iterrows():
    print(row['pop'])

运行结果:
在这里插入图片描述

3.2 第二种方法

for row in frame.itertuples():
    print(getattr(row, 'state'), getattr(row, 'year'), getattr(row, 'pop'))
    print(type(row))

运行结果:
在这里插入图片描述

4 遍历DataFrame某一列(行)数据

演示数据准备

data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],
'year':[2000,2001,2002,2003,2004,2005],
'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame = pd.DataFrame(data)

4.1 获取frame的index属性,然后使用frame[列索引].get(行索引)获得对应的值

print(frame.columns)
for index in frame.index:
    print(frame['state'].get(index))

运行结果:
在这里插入图片描述
与上面等价的两种写法

# 第一种
for index in frame.index:
    print(frame['state'][index])
# 第二种
for index in frame.index:
    print(frame.get('state').get(index))

4.2 获取frame的column属性,然后使用frame[列索引].get(行索引)获得对应的值

print(frame.index)
for column in frame.columns:
    print(frame[column].get(0))

运行结果:
在这里插入图片描述

5 获取某一个值

5.1 DataFrame.at[行索引,列索引]获取某一个值

在这里插入图片描述

5.2 DataFrame.iat[默认行索引,默认列索引]获取某一个值

在这里插入图片描述

5.3 DataFrame.loc[行索引,列索引]获取某个值,与at不同的是,只输入某一参数,获得某一行或某一列

在这里插入图片描述

5.4 DataFrame.iloc[默认行索引,默认列索引]获取某个值,与iat不同的是,只输入某一参数,获得某一行或某一列:

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们被要求遍历Pandas DataFrame的行或列。根据引用[3]中的内容,我们知道可以使用`itertuples()`方法来按行迭代。此外,Pandas还提供了其他方法如`iterrows()`,但通常`itertuples()`更快。 同时,我们也可以遍历列,因为DataFrame的列是带有标签的,我们可以直接迭代列名,然后通过列名访问每一列。 因此,我们将分为两部分: 1. 遍历行 2. 遍历列 注意:在遍历DataFrame时,通常不推荐使用循环,因为Pandas的向量化操作更高效。但在某些场景下,遍历是必要的。 我们将提供以下方法遍历行: - 使用`df.iterrows()`:返回索引和行数据(作为Series) - 使用`df.itertuples()`:返回一个命名元组,更高效 遍历列: - 直接遍历`df.columns`,然后通过列名访问列 - 使用`df.items()`:返回列名和该列的Series 注意:引用[3]中给出了`itertuples()`的例子,我们将参考它。 下面给出具体代码示例。</think>在 Pandas遍历 DataFrame 的行或列有多种高效方法,以下是主要技术方案: ### 一、遍历 DataFrame 行(行迭代) #### 1. **`itertuples()` 方法(最高效)** 返回命名元组,速度最快且内存效率高: ```python import pandas as pd df = pd.DataFrame({ 'Name': ['Alice', 'Bob', 'Aritra'], 'Age': [25, 30, 35], 'Location': ['Seattle', 'New York', 'Kona'] }, index=[10, 20, 30]) for row in df.itertuples(): print(f"Index: {row.Index}, Name: {row.Name}, Age: {row.Age}") ``` **优点**:性能最佳,支持属性访问(如 `row.Name`)[^3] #### 2. **`iterrows()` 方法** 返回 (index, Series) 对: ```python for index, row in df.iterrows(): print(f"Index: {index}, Name: {row['Name']}, Age: {row['Age']}") ``` **注意**:返回的 `row` 是副本而非视图,修改不影响原数据 #### 3. **`apply()` 函数(函数式迭代)** 结合 lambda 函数按行处理: ```python def process_row(row): return f"{row['Name']} in {row['Location']}" df['Info'] = df.apply(process_row, axis=1) # axis=1 表示行方向 ``` --- ### 二、遍历 DataFrame 列(列迭代) #### 1. **直接遍历列名** ```python for column in df.columns: print(f"Column: {column}") print(f"Values: {df[column].values}") # 访问列数据 ``` #### 2. **`items()` 方法(列迭代器)** 返回 (列名, Series) 对: ```python for col_name, data in df.items(): print(f"Column: {col_name}") print(f"First value: {data.iloc[0]}") # 访问列数据 ``` #### 3. **`iteritems()` 方法Pandas 旧版本)** ```python for col_name, data in df.iteritems(): # 同 items() print(f"Column: {col_name}") ``` --- ### 三、性能比较与选择建议 | 方法 | 适用场景 | 性能 | 内存效率 | |---------------|----------------------------|--------|---------| | `itertuples()`| 行遍历(需高性能) | ★★★★★ | 高 | | `iterrows()` | 行遍历(需索引) | ★★☆ | 中 | | `apply()` | 行/列函数式处理 | ★★★☆ | 高 | | `items()` | 列遍历 | ★★★★☆ | 高 | > **最佳实践**:优先使用向量化操作(避免显式循环),必须循环时: > - 行遍历:用 `itertuples()` > - 列遍历:用 `items()` --- ### 四、高级技巧:向量化替代方案 多数场景可用内置函数替代循环: ```python # 替代行遍历的向量化操作 df['Age_Next_Year'] = df['Age'] + 1 # 所有行年龄+1 # 替代列遍历的向量化操作 df = df.rename(columns=str.upper) # 所有列名转大写 ``` 向量化操作速度比循环快 $10\sim100$ 倍[^3][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值