目录
一、pandas.DataFrame.iterrows
二、pandas.DataFrame.itertuples
三、pandas.DataFrame.items
pandas 逐行/逐列 遍历数据有以下三种方法:
DataFrame.iterrows() [source]
按行遍历,将DataFrame的每一行迭代为(index, Series)对。
输出:index:label或label元组
行的索引。对于一个MultiIndex则需要一个元组。
data:Series
行的数据作为Series。
注意
因为 interrows
为每一行返回一个 Series,所以它不会跨行保留数据类型(对于数据帧,数据类型跨列保留)。例如,
>>> 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
要在遍历行时保留数据类型,最好使用itertuples() ,该函数会返回依据values的命名元组,并且通常比iterrows()效率高。
你永远不应该修改你正在迭代的东西。这不能保证在所有情况下都有效。根据数据类型,迭代器返回的是数据的副本而不是数据视图,写入它不会有任何效果。
DataFrame.itertuples(index=True, name='Pandas') [source]
按行遍历,将DataFrame的每一行迭代为元组。
参数:index:bool, 缺省为 True
如果为真,则将索引作为元组的第一个元素返回。
name:str 或 None, 缺省为 “Pandas”
对于命名元组返回其名称,或 对返回常规元组返回None。
返回:iterator
为 DataFrame 中的每一行迭代命名元组的对象,第一个字段可能是索引,
后面的字段是列的value值。
注意
如果列名是无效的 Python 标识符、重复的或以下划线开头,它们将被重命名为位置名称。
例子
>>> 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)
通过将索引参数设置为 False,我们可以删除作为元组的第一个元素的 Index:
>>> for row in df.itertuples(index=False):
... print(row)
...
Pandas(num_legs=4, num_wings=0)
Pandas(num_legs=2, num_wings=2)
通过设置name参数,我们可以为生成的命名元组设置自定义名称:
>>> 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)
DataFrame.items() [source]
按列遍历,将DataFrame的每一列迭代为(列名, Series)对
输入:标签:object
正在迭代的 DataFrame 的列名。
内容:Series
属于每个标签的列条目,作为Series。
例子
df = pd.DataFrame({'species': ['bear', 'bear', 'marsupial'], ... 'population': [1864, 22000, 80000]}, ... index=['panda', 'polar', 'koala']) >>> df species population panda bear 1864 polar bear 22000 koala marsupial 80000 >>> for label, content in df.items(): ... print(f'label: {label}') ... print(f'content: {content}', sep='\n') ... label: species content: panda bear polar bear koala marsupial Name: species, dtype: object label: population content: panda 1864 polar 22000 koala 80000 Name: population, dtype: int64