pandas——按行遍历dataframe的优选方法(itertuples,iterrows)

1. 以命名元组的形式遍历DataFrame行

pandas.DataFrame.itertuples

DataFrame.itertuples(index=True, name='Pandas')

关键字参数:index

默认为True,所需为布尔值。当值为True时,将索引作为元组的第一个元素返回。

关键字参数:name

默认为“Pandas”,所需为字符串或None。命名返回的元组的名称,当为None时,返回普通元组。

返回:iterator

迭代器:用于返回DataFrame每行形成的命名元组,命名元组的第一个字段可能是索引,其余字段是列值。

tips:当列名是无效的Python标识符、或重复值、或以下划线开头时,该列名会以当前位置重命名。

示例:简单使用itertuples,不设置index和name

>>> df = pd.DataFrame({'num_legs': [4, 2], 'num_wings': [0, 2]},
...                   index=['dog', 'hawk'])
>>> df
      num_legs  num_wings
dog          4          0
hawk         2          2
>>> for row in df.itertuples():
...     print(row)
...
Pandas(Index='dog', num_legs=4, num_wings=0)
Pandas(Index='hawk', num_legs=2, num_wings=2)

示例:设置index=False以取消索引为首个字段

>>> for row in df.itertuples(index=False):
...     print(row)
...
Pandas(num_legs=4, num_wings=0)
Pandas(num_legs=2, num_wings=2)

示例:自定义元组名称

>>> for row in df.itertuples(name='Animal'):
...     print(row)
...
Animal(Index='dog', num_legs=4, num_wings=0)
Animal(Index='hawk', num_legs=2, num_wings=2)

2. 以 (index, Series) 对的形式遍历 DataFrame行

pandas.DataFrame.iterrows

返回:index

标签或标签元组。即行索引或多维索引元组。

返回:Series

以Series形式展示该行的数据。

示例:直接使用iterrows

由于 iterrows 会为每一行返回一个 Series,因此不会跨行保留 dtypes(DataFrames 的 dtypes 会跨列保留)。

>>> df = pd.DataFrame([[1, 1.5]], columns=['int', 'float'])
>>> row = next(df.iterrows())[1]
>>> row
int      1.0
float    1.5
Name: 0, dtype: float64
>>> print(row['int'].dtype)
float64
>>> print(df['int'].dtype)
int64

为了在遍历行时保留 dtypes,最好使用 itertuples(),它返回值的命名元组,通常比 iterrows 更快。

tips:永远不要修改正在迭代的内容。这并不能保证在所有情况下都有效。根据数据类型的不同,迭代器返回的是副本而不是视图,对其写入不会有任何影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值