1. 程式人生 > >pandas 學習彙總3 - Series,DataFrame迭代iter( tcy)

pandas 學習彙總3 - Series,DataFrame迭代iter( tcy)

迭代iter   2018/12/1
    
=======================================================================
1.基本iteration()產生:#系列:值;DataFrame:列標籤;面板:專案標籤
# 迭代Series類似陣列,迭代產生值。其他資料結構如DataFrame遵循迭代物件“鍵”的類似dict
    
s = pd.Series( [1,2,3],index=['a', 'b', 'c'])
for col in s:
    print(col,end=",")  #1 ,2 ,3,

df = pd.DataFrame({'col1' : [1,2,3], 'col2' : [4,5.0,6]},index=['a', 'b', 'c'])
for col in df:
       print(col)           # col1 col2
=======================================================================
    
2.iteritems 類似dict遍歷鍵值對:
# 系列 :(索引,標量值)對;DataFrame :(列,系列)對;面板 :( item,DataFrame)對
    
for index,value in s.iteritems():
    print('(%s,%s)'%(index,value,),end='') # (a,1)(b,2)(c,3)
    
for col,s0 in df.iteritems():
    print(col)
    print(s0)
# col1
# a    1
# b    2
# c    3
# Name: col1, dtype: int64
# col2
# a    4.0
# b    5.0
# c    6.0
# Name: col2, dtype: float64
=====================================================================
3.迭代DataFrame行
    
iterrows()迭代DataFrame行返回迭代器,產生索引值及每行Series;沒有保留跨行dtypes
itertuples()返回迭代器,為DataFrame每一行產生一個namedtuple。
    # 元組的第一個元素是行的相應索引值,而其餘值是行值。
    #  itertuples()保留值的資料型別快於iterrows()
    
# 例項1:
for row_index, row in df.iterrows():
       print('%s\n%s' % (row_index, row))
       
#  a
# col1    1.0
# col2    4.0
# Name: a, dtype: float64
# b
# col1    2.0
# col2    5.0
# Name: b, dtype: float64
# c
# col1    3.0
# col2    6.0
# Name: c, dtype: float64
    
# 例項2:
for row in df.itertuples():
       print(row)
    
# Pandas(Index='a', col1=1, col2=4.0)
# Pandas(Index='b', col1=2, col2=5.0)
# Pandas(Index='c', col1=3, col2=6.0)
======================================================================
4.備註
    # pandas物件迭代通常很慢。在許多情況下,不需要在行上迭代,用以下方法之一避免:
    # 向量化:內建方法或NumPy函式(布林)索引,若無函式可用最好用apply()而不是迭代值。
    # 效能很重要用cython或numba編寫內部迴圈。
    
警告
    迭代器返回副本而不是檢視,寫入它將不起作用!
======================================================================