遍历是众多编程语言中必备的一种操作,比如 Python 语言通过 for 循环来遍历列表结构。那么 Pandas 是如何遍历 Series 和 DataFrame 结构呢?我们应该明确,它们的数据结构类型不同的,遍历的方法必然会存在差异。对于 Series 而言,您可以把它当做一维数组进行遍历操作;而像 DataFrame 这种二维数据表结构,则类似于遍历 Python 字典。
在 Pandas 中同样也是使用 for 循环进行遍历。通过for遍历后,Series 可直接获取相应的 value,而 DataFrame 则会获取列标签。示例如下:
- import pandas as pd
- import numpy as np
- N=20
- df = pd.DataFrame({
- 'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
- 'x': np.linspace(0,stop=N-1,num=N),
- 'y': np.random.rand(N),
- 'C': np.random.choice(['Low','Medium','High'],N).tolist(),
- 'D': np.random.normal(100, 10, size=(N)).tolist()
- })
- print(df)
- for col in df:
- print (col)
输出结果:
如果想要遍历 DataFrame 的每一行,我们下列函数:
下面对上述函数做简单的介绍:
以键值对的形式遍历 DataFrame 对象,以列标签为键,以对应列的元素为值。
- import pandas as pd
- import numpy as np
- df = pd.DataFrame(np.random.randn(4,3),columns=['col1','col2','col3'])
- for key,value in df.iteritems():
- print (key,value)
输出结果:
该方法按行遍历,返回一个迭代器,以行索引标签为键,以每一行数据为值。示例如下:
- import pandas as pd
- import numpy as np
- df = pd.DataFrame(np.random.randn(3,3),columns = ['col1','col2','col3'])
- print(df)
- for row_index,row in df.iterrows():
- print (row_index,row)
输出结果:
注意:iterrows() 遍历行,其中 0,1,2 是行索引而 col1,col2,col3 是列索引。
itertuples() 同样将返回一个迭代器,该方法会把 DataFrame 的每一行生成一个元组,示例如下:
- import pandas as pd
- import numpy as np
- df = pd.DataFrame(np.random.rand(3,3),columns = ['c1','c2','c3'])
- for row in df.itertuples():
- print(row)
输出结果:
迭代器返回的是原对象的副本,所以,如果在迭代过程中修改元素值,不会影响原对象,这一点需要大家注意。
看一组简单的示例:
- import pandas as pd
- import numpy as np
- df = pd.DataFrame(np.random.randn(3,3),columns = ['col1','col2','col3'])
- for index, row in df.iterrows():
- row['a'] = 15
- print (df)
输出结果:
由上述示例可见,原对象df没有受到任何影响。