对应书本第二部分第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的调用函数方法迭代调用。
网友评论