中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pandas.DataFrame的for循環迭代如何實現

發布時間:2023-02-22 10:52:37 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

本篇內容主要講解“pandas.DataFrame的for循環迭代如何實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“pandas.DataFrame的for循環迭代如何實現”吧!

    當使用for語句循環(迭代)pandas.DataFrame時,簡單的使用for語句便可以取得返回列名,因此使用重復使用for方法,便可以獲取每行的值。

    以下面的pandas.DataFrame為例。

    import pandas as pd
    
    df = pd.DataFrame({'age': [24, 42], 'state': ['NY', 'CA'], 'point': [64, 92]},
                      index=['Alice', 'Bob'])
    
    print(df)
    #        age state  point
    # Alice   24    NY     64
    # Bob     42    CA     92

    在此對以下內容進行說明:

    • pandas.DataFrame for循環的應用

    • 逐列檢索

      • DataFrame.iteritems()

    • 逐行檢索

      • DataFrame.iterrows()

      • DataFrame.itertuples()

    • 檢索特定列的值

    • 循環更新值

    pandas.DataFrame for循環的應用

    當pandas.DataFrame直接使用for循環時,按以下順序獲取列名(列名)。

    for column_name in df:
        print(type(column_name))
        print(column_name)
        print('======\n')
    # <class 'str'>
    # age
    # ======
    # 
    # <class 'str'>
    # state
    # ======
    # 
    # <class 'str'>
    # point
    # ======
    #

    調用方法__iter __()。

    for column_name in df.__iter__():
        print(type(column_name))
        print(column_name)
        print('======\n')
    # <class 'str'>
    # age
    # ======
    # 
    # <class 'str'>
    # state
    # ======
    # 
    # <class 'str'>
    # point
    # ======
    #

    逐列檢索

    DataFrame.iteritems()

    使用iteritems()方法,您可以一一獲取列名稱(列名稱)和元組(列名稱,系列)的每個列的數據(pandas.Series類型)。

    pandas.Series可以通過指定索引名稱等來檢索行的值。

    for column_name, item in df.iteritems():
        print(type(column_name))
        print(column_name)
        print('~~~~~~')
    
        print(type(item))
        print(item)
        print('------')
    
        print(item['Alice'])
        print(item[0])
        print(item.Alice)
        print('======\n')
    # <class 'str'>
    # age
    # ~~~~~~
    # <class 'pandas.core.series.Series'>
    # Alice    24
    # Bob      42
    # Name: age, dtype: int64
    # ------
    # 24
    # 24
    # 24
    # ======
    # 
    # <class 'str'>
    # state
    # ~~~~~~
    # <class 'pandas.core.series.Series'>
    # Alice    NY
    # Bob      CA
    # Name: state, dtype: object
    # ------
    # NY
    # NY
    # NY
    # ======
    # 
    # <class 'str'>
    # point
    # ~~~~~~
    # <class 'pandas.core.series.Series'>
    # Alice    64
    # Bob      92
    # Name: point, dtype: int64
    # ------
    # 64
    # 64
    # 64
    # ======
    #

    逐行檢索

    一次檢索一行的方法包括iterrows()和itertuples()。 itertuples()更快。

    如果只需要特定列的值,則如下所述,指定列并將它們分別在for循環中進行迭代會更快。

    DataFrame.iterrows()

    通過使用iterrows()方法,可以獲得每一行的數據(pandas.Series類型)和行名和元組(索引,系列)。

    pandas.Series可以通過指定列名等來檢索列的值。

    for index, row in df.iterrows():
        print(type(index))
        print(index)
        print('~~~~~~')
    
        print(type(row))
        print(row)
        print('------')
    
        print(row['point'])
        print(row[2])
        print(row.point)
        print('======\n')
    # <class 'str'>
    # Alice
    # ~~~~~~
    # <class 'pandas.core.series.Series'>
    # age      24
    # state    NY
    # point    64
    # Name: Alice, dtype: object
    # ------
    # 64
    # 64
    # 64
    # ======
    # 
    # <class 'str'>
    # Bob
    # ~~~~~~
    # <class 'pandas.core.series.Series'>
    # age      42
    # state    CA
    # point    92
    # Name: Bob, dtype: object
    # ------
    # 92
    # 92
    # 92
    # ======

    DataFrame.itertuples()

    使用itertuples()方法,可以一一獲取索引名(行名)和該行數據的元組。元組的第一個元素是索引名稱。

    默認情況下,返回一個名為Pandas的namedtuple。由于它是namedtuple,因此可以訪問每個元素的值。

    for row in df.itertuples():
        print(type(row))
        print(row)
        print('------')
    
        print(row[3])
        print(row.point)
        print('======\n')
    # <class 'pandas.core.frame.Pandas'>
    # Pandas(Index='Alice', age=24, state='NY', point=64)
    # ------
    # 64
    # 64
    # ======
    # 
    # <class 'pandas.core.frame.Pandas'>
    # Pandas(Index='Bob', age=42, state='CA', point=92)
    # ------
    # 92
    # 92
    # ======
    #

    如果參數name為None,則返回一個普通的元組。

    for row in df.itertuples(name=None):
        print(type(row))
        print(row)
        print('------')
    
        print(row[3])
        print('======\n')
    # <class 'tuple'>
    # ('Alice', 24, 'NY', 64)
    # ------
    # 64
    # ======
    # 
    # <class 'tuple'>
    # ('Bob', 42, 'CA', 92)
    # ------
    # 92
    # ======

    檢索特定列的值

    上述的iterrows()和itertuples()方法可以檢索每一行中的所有列元素,但是如果僅需要特定的列元素,可以使用以下方法。

    pandas.DataFrame的列是pandas.Series。

    print(df['age'])
    # Alice    24
    # Bob      42
    # Name: age, dtype: int64
    
    print(type(df['age']))
    # <class 'pandas.core.series.Series'>

    如果將pandas.Series應用于for循環,則可以按順序獲取值,因此,如果指定pandas.DataFrame列并將其應用于for循環,則可以按順序獲取該列中的值。

    for age in df['age']:
        print(age)
    # 24
    # 42

    如果使用內置函數zip(),則可以一次收集多列值。

    for age, point in zip(df['age'], df['point']):
        print(age, point)
    # 24 64
    # 42 92

    如果要獲取索引(行名),使用index屬性。如以上示例所示,可以與其他列一起通過zip()獲得。

    print(df.index)
    # Index(['Alice', 'Bob'], dtype='object')
    
    print(type(df.index))
    # <class 'pandas.core.indexes.base.Index'>
    
    for index in df.index:
        print(index)
    # Alice
    # Bob
    
    for index, state in zip(df.index, df['state']):
        print(index, state)
    # Alice NY
    # Bob CA

    循環更新值

    iterrows()方法逐行檢索值,返回一個副本,而不是視圖,因此更改pandas.Series不會更新原始數據。

    for index, row in df.iterrows():
        row['point'] += row['age']
    
    print(df)
    #        age state  point
    # Alice   24    NY     64
    # Bob     42    CA     92

    at[]選擇并處理原始DataFrame中的數據時更新。

    for index, row in df.iterrows():
        df.at[index, 'point'] += row['age']
    
    print(df)
    #        age state  point
    # Alice   24    NY     88
    # Bob     42    CA    134

    有關at[]的文章另請參考以下連接。

    Pandas獲取和修改任意位置的值(at,iat,loc,iloc)

    請注意,上面的示例使用at[]只是一個示例,在許多情況下,有必要使用for循環來更新元素或基于現有列添加新列,for循環的編寫更加簡單快捷。

    與上述相同的處理。上面更新的對象被進一步更新。

    df['point'] += df['age']
    print(df)
    #        age state  point
    # Alice   24    NY    112
    # Bob     42    CA    176

    可以添加新列。

    df['new'] = df['point'] + df['age'] * 2
    print(df)
    #        age state  point  new
    # Alice   24    NY    112  160
    # Bob     42    CA    176  260

    除了簡單的算術運算之外,NumPy函數還可以應用于列的每個元素。以下是平方根的示例。另外,這里,NumPy的功能可以通過pd.np訪問,但是,當然可以單獨導入NumPy。

    df['age_sqrt'] = pd.np.sqrt(df['age'])
    print(df)
    #        age state  point  new  age_sqrt
    # Alice   24    NY    112  160  4.898979
    # Bob     42    CA    176  260  6.480741

     對于字符串,提供了用于直接處理列(系列)的字符串方法。下面是轉換為小寫并提取第一個字符的示例。

    df['state_0'] = df['state'].str.lower().str[0]
    print(df)
    #        age state  point  new  age_sqrt state_0
    # Alice   24    NY    112  160  4.898979       n
    # Bob     42    CA    176  260  6.480741       c

    到此,相信大家對“pandas.DataFrame的for循環迭代如何實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    大同县| 慈利县| 九龙城区| 石河子市| 宕昌县| 依兰县| 普兰县| 临江市| 定安县| 光泽县| 万盛区| 改则县| 潞西市| 普陀区| 兖州市| 千阳县| 讷河市| 大庆市| 南平市| 芦溪县| 邳州市| 洪洞县| 武清区| 恭城| 大足县| 罗田县| 长丰县| 涿鹿县| 综艺| 松滋市| 扎兰屯市| 海南省| 锡林浩特市| 清河县| 邵东县| 泽普县| 太仆寺旗| 红原县| 城固县| 循化| 金乡县|