美文网首页
深入浅出Pandas--Pandas高级操作--数据迭代

深入浅出Pandas--Pandas高级操作--数据迭代

作者: 亦是旅人呐 | 来源:发表于2022-11-23 09:11 被阅读0次

    对应书本第二部分第5章Pandas高级操作第6节

    数据迭代和数据遍历都是按照某种顺序逐个对数据进行访问和操作,在Python中大多由for语句来引导。Pandas中的迭代操作可以将数据按行或者按列遍历,我们可以进行更加细化、个性化的数据处理。


    迭代Series

    Series本身是一个可迭代对象,Series df.name.values返回array结构数据可用于迭代,不过可直接对Series使用for语句来遍历它的值:

    # 迭代指定的列
    for i in df.name:
        print(i)
    

    迭代索引和指定的多列,使用Python内置的zip函数将其打包为可迭代的zip对象:

    # 迭代索引和指定的两列
    for i,n,q in zip(df.index, df.name, df.Q1):
        print(i, n, q)
    

    df.iterrows()

    df.iterrows()生成一个可迭代对象,将DataFrame行作为(索引,行数据)组成的Series数据对进行迭代。在for语句中需要两个变量来承接数据:一个为索引变量,即使索引在迭代中不会使用(这种情况可用useless作为变量名);另一个为数据变量,读取具体列时,可以使用字典的方法和对象属性的方法。

    # 迭代,使用name、Q1数据
    for index, row in df.iterrows():
        print(index, row['name'], row.Q1)
    

    df.iterrows()是最常用、最方便的按行迭代方法。


    df.itertuples()

    df.itertuples()生成一个namedtuples类型数据,name默认名为Pandas,可以在参数中指定。

    for row in df.itertuples():
        print(row)
    

    以下是一些使用方法示例:

    # 不包含索引数据
    for row in df.itertuples(index=False):
        print(row)
    # Pandas(name='Liver', team='E', Q1=89, Q2=21, Q3=24, Q4=64)
    # 自定义name
    for row in df.itertuples(index=False, name='Gairuo'): # namedtuples
        print(row)
    # Gairuo(name='Liver', team='E', Q1=89, Q2=21, Q3=24, Q4=64)
    # 使用数据
    for row in df.itertuples():
        print(row.Index, row.name)
    

    df.items()

    df.items()和df.iteritems()功能相同,它迭代时返回一个(列名,本列的Series结构数据),实现对列的迭代

    # Series取前三个
    for label, ser in df.items():
        print(label)
        print(ser[:3], end='\n\n')
    

    如果需要对Series的数据再进行迭代,可嵌套for循环。


    按列迭代

    除了df.items(),如需要迭代一个DataFrame的列,可以直接对DataFrame迭代,会循环得到列名:

    # 直接对DataFrame迭代
    for column in df:
        print(column)
    

    再利用df [列名]的方法迭代列:

    # 依次取出每个列
    for column in df:
        print(df[column])
    # 可对每个列的内容进行迭代
    for column in df:
        for i in df[column]:
            print(i)
    
    # 可以迭代指定列
    for i in df.name:
        print(i)
    # 只迭代想要的列
    l = ['name', 'Q1']
    cols = df.columns.intersection(l)
    for col in cols:
        print (col)
    

    迭代的优势是可以把大量重复的事务按规定的逻辑依次处理,处理逻辑部分的也能随心所欲地去发挥,同时它简单清晰,初学者也很容易理解。如果需要再提升代码的执行效率,就要将逻辑处理代码写成函数,使用Pandas的调用函数方法迭代调用。

    相关文章

      网友评论

          本文标题:深入浅出Pandas--Pandas高级操作--数据迭代

          本文链接:https://www.haomeiwen.com/subject/qfqftdtx.html