• 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 奇数
    ##### 愿你一寸一寸地攻城略地,一点一点地焕然一新 #####
  • 相关阅读:
    刷新界面
    分页加载数据(每次10条内容)的简单计算
    Intent传输包含对象的List集合
    android定时更新文件
    java中byte数据转换为c#的byte数据
    java zip文件的解压缩(支持中文文件名)
    Redis PHP扩展安装步骤
    CentOS6.5 开机启动自动运行redis服务
    centos7.2挂载硬盘攻略
    探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题
  • 原文地址:https://www.cnblogs.com/johnyang/p/14709521.html
Copyright © 2020-2023  润新知