zoukankan      html  css  js  c++  java
  • DataFrame.iterrows的一种用法

    import pandas as pd
    
    import numpy as np
    
    help(pd.DataFrame.iterrows)
    
    Help on function iterrows in module pandas.core.frame:
    
    iterrows(self)
        Iterate over DataFrame rows as (index, Series) pairs.
        
        Notes
        -----
        
        1. Because ``iterrows`` returns a Series for each row,
           it does **not** preserve dtypes across the rows (dtypes are
           preserved across columns for DataFrames). For example,
        
           >>> 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
        
           To preserve dtypes while iterating over the rows, it is better
           to use :meth:`itertuples` which returns namedtuples of the values
           and which is generally faster than ``iterrows``.
        
        2. You should **never modify** something you are iterating over.
           This is not guaranteed to work in all cases. Depending on the
           data types, the iterator returns a copy and not a view, and writing
           to it will have no effect.
        
        Returns
        -------
        it : generator
            A generator that iterates over the rows of the frame.
        
        See also
        --------
        itertuples : Iterate over DataFrame rows as namedtuples of the values.
        iteritems : Iterate over (column name, Series) pairs.
    

    运用iterrows()返回的index和row,其中index是行索引,row是包含改行信息的Series的迭代器。运用这个方法,可以一行一行的增加特殊要求的列(前提是首先初始化该特殊要求的列)

    xx=np.random.randint(9,size=(6,3))
    
    tests=pd.DataFrame(xx,columns=['one','two','three']);tests
    
    one two three
    0 3 0 4
    1 1 0 3
    2 1 4 4
    3 7 3 2
    4 7 5 0
    5 5 8 8

    现在我们想加上一列,这一列的要求如下:如果同行的'one'+'two'+'three'是奇数,则写上奇数,如果是偶数,则写上偶数。

    tests['special']='ini'
    
    for index,row in tests.iterrows():
        num=(row.values[:-1]).sum()
        if num%2 :
            row['special']='奇数'
        else:
            row['special']='偶数'
        tests.loc[index]=row          #将Series 迭代器row赋值给tests的index行
    
    tests
    
    one two three special
    0 3 0 4 奇数
    1 1 0 3 偶数
    2 1 4 4 奇数
    3 7 3 2 偶数
    4 7 5 0 偶数
    5 5 8 8 奇数
    ##### 愿你一寸一寸地攻城略地,一点一点地焕然一新 #####
  • 相关阅读:
    Java核心技术 卷一 笔记四 库类的直接使用
    Java核心技术 卷一 笔记三 大数值及数组
    Java核心技术 卷一 笔记2 字符串的复制
    Java核心技术 卷一 笔记1
    修改css 样式后, hover事件 不生效
    修改 element ui input 输入框 样式不生效问题
    css3 计算属性
    Vue3 改动系列
    浏览器实现,向下滑动 鼠标滚轮,页面横向移动
    linux ceont0s7 vue 打包压缩图片 一直报错
  • 原文地址:https://www.cnblogs.com/johnyang/p/14709521.html
Copyright © 2011-2022 走看看