成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Pandas的五項高級功能及使用方法

譯文
大數據 前端
你用Python準備數據時,Pandas庫提供了核心功能。但許多人只了解基礎的方法,本文介紹的這些鮮為人知的高級方法讓你更輕松整潔地處理數據。

【51CTO.com快譯】 你用Python準備數據時,Pandas庫提供了核心功能。但許多人只了解基礎的方法,本文介紹的這些鮮為人知的高級方法讓你更輕松整潔地處理數據。

[[280888]]

Pandas是數據界的典型庫。由于能夠加載、過濾、處理和瀏覽數據,難怪它備受數據科學家的喜愛。

大多數人自然會堅守Pandas很基礎的方法。從CSV文件加載數據,過濾幾列,然后直接進入到數據可視化。不過Pandas實際上有許多鮮為人知但實用的功能,可以使數據處理起來輕松得多,整潔得多。

本教程將介紹5項更高級的功能、它們的功用及使用方法。

 (1)配置選項和設置

Pandas帶有一組用戶可配置的選項和設置。它們能大大提高生產力,因為你可以根據自己的喜好來定制Pandas環境。

比如說,我們可以更改Pandas的一些顯示設置,改變顯示的行數和列數以及顯示的精度浮點數。

  1. import pandas as pd 
  2. display_settings = { 
  3. 'max_columns'10
  4. 'expand_frame_repr'True# Wrap to multiple pages 
  5. 'max_rows'10
  6. 'precision'2
  7. 'show_dimensions'True 
  8. for op, value in display_settings.items(): 
  9. pd.set_option("display.{}".format(op), value) 

上面的代碼確保Pandas始終最多顯示10行和10列,浮點值最多顯示2個小數位。這樣,我們嘗試打印大的DataFrame時,終端或Jupyter Notebook不會看起來一團糟!

這只是個基本的例子。除了簡單的顯示設置外,還有很多設置可以探索。可以查看官方文檔中的所有選項(https://pandas.pydata.org/pandas-docs/stable/user_guide/options.html)。

 (2)合并DataFrame

Pandas DataFrame一個相對不為人知的地方是,實際上有兩種不同的方法來合并。每種方法得到的結果不一樣,因此,根據你要實現的目標選擇合適的方法很重要。此外,它們含有許多進一步定制合并的參數。不妨看一下。

連接

連接是合并DataFrame的最著名方法,它好比“堆疊”。這種堆疊可以橫向或縱向進行。

假設你有一個龐大的CSV格式的數據集。將它分成多個文件以便處理合情合理(這是大型數據集的常見做法,名為分片)。

將其加載到Pandas后,你可以縱向堆疊每個CSV的DataFrame,為所有數據創建一個大的DataFrame。假設我們有3個分片,每個分片有500萬行,那么在縱向堆疊所有分片后,最終的DataFrame會有1500萬行。

下面的代碼顯示了如何在Pandas中縱向連接DataFrame。

  1. # Vertical concat 
  2. pd.concat([october_df, november_df, december_df], axis=0

你可以按照列而不是按照行來拆分數據集,執行類似的操作——每個CSV文件有幾列(包含數據集的所有行)。就像我們將數據集的特征劃分為不同的分片那樣。然后,你可以橫向堆疊它們以合并那些列/特征。

  1. # Horizontal concat 
  2. pd.concat([features_1to5_df, features_6to10_df, features_11to15_df], axis=1

合并

合并更復雜但功能更強大,以類似SQL的方式合并Pandas DataFrame,即DataFrame將通過某個常見屬性加以連接。

假設你有描述YouTube頻道的兩個DataFrame。其中一個含有用戶ID列表和每個用戶在頻道上總共花費的時間。另一個含有類似的用戶ID列表和每個用戶看過多少視頻。合并使我們可以通過匹配用戶ID,然后將ID、花費的時間和視頻數量歸入到每個用戶的單行,即可將兩個DataFrame合并為一個。

合并Pandas中的兩個DataFrame通過合并函數來完成。你可以在下面的代碼中看到其工作方式。left和right參數是指你希望合并的兩個DataFrame,而on指定了用于匹配的列。

  1. pd.merge(left=ids_and_time_df, 
  2. right=ids_and_videos_df, 
  3. on="id"

為了進一步模擬SQL連接,how參數讓你可以選擇想要執行的類似SQL的連接的類型:內、外、左或右。想了解SQL連接的更多信息,請參閱W3Schools教程(https://www.w3schools.com/sql/sql_join.asp)。

(3)重塑DataFrame

有幾種方法可以重塑和重組Pandas DataFrame。既有簡單易用的方法,也有強大復雜的方法。不妨看看最常見的三種方法。針對以下所有示例,我們將使用超級英雄的這個數據集!

  1. import pandas as pd 
  2. players_data = {'Player': ['Superman''Batman''Thanos''Batman''Thanos'
  3. 'Superman''Batman''Thanos''Black Widow''Batman''Thanos''Superman'], 
  4. 'Year': [2000,2000,2000,2001,2001,2002,2002,2002,2003,2004,2004,2005], 
  5. 'Points':[23,43,45,65,76,34,23,78,89,76,92,87]} 
  6. df = pd.DataFrame(players_data) 
  7. print(df) 
  8. """ 
  9. Player Year Points 
  10. 0 Superman 2000 23 
  11. 1 Batman 2000 43 
  12. 2 Thanos 2000 45 
  13. 3 Batman 2001 65 
  14. 4 Thanos 2001 76 
  15. 5 Superman 2002 34 
  16. 6 Batman 2002 23 
  17. 7 Thanos 2002 78 
  18. 8 Black Widow 2003 89 
  19. 9 Batman 2004 76 
  20. 10 Thanos 2004 92 
  21. 11 Superman 2005 87 
  22. """ 

轉置

轉置是其中最簡單的。轉置將DataFrame的行與列進行互換。如果你有5000行和10列,然后轉置你的DataFrame后,最終會得到10行和5000列。

  1. import pandas as pd 
  2. players_data = {'Player': ['Superman''Batman''Thanos''Batman''Thanos'
  3. 'Superman''Batman''Thanos''Black Widow''Batman''Thanos''Superman'], 
  4. 'Year': [2000,2000,2000,2001,2001,2002,2002,2002,2003,2004,2004,2005], 
  5. 'Points':[23,43,45,65,76,34,23,78,89,76,92,87]} 
  6. df = pd.DataFrame(players_data) 
  7. print(df) 
  8. """ 
  9. Player Year Points 
  10. 0 Superman 2000 23 
  11. 1 Batman 2000 43 
  12. 2 Thanos 2000 45 
  13. 3 Batman 2001 65 
  14. 4 Thanos 2001 76 
  15. 5 Superman 2002 34 
  16. 6 Batman 2002 23 
  17. 7 Thanos 2002 78 
  18. 8 Black Widow 2003 89 
  19. 9 Batman 2004 76 
  20. 10 Thanos 2004 92 
  21. 11 Superman 2005 87 
  22. """ 

Groupby

Groupby的主要用途是根據一些鍵將DataFrame分成多個部分。一旦DataFrame拆分成多個部分,你可以執行遍歷、對每個部分獨立執行一些操作。

比如說,我們可以從下面的代碼中看到如何創建了有相應年份和積分的玩家DataFrame。然后我們執行groupby,根據玩家將DataFrame分為多個部分。因此,每個玩家都有自己的組,顯示該玩家每年玩游戲時獲得了多少積分。

  1. groups_df = df.groupby('Player'
  2. for player, group in groups_df: 
  3. print("----- {} -----".format(player)) 
  4. print(group) 
  5. print("") 
  6.  
  7. ### This prints out the following 
  8. """ 
  9. ----- Batman ----- 
  10. Player Year Points 
  11. 1 Batman 2000 43 
  12. 3 Batman 2001 65 
  13. 6 Batman 2002 23 
  14. 9 Batman 2004 76 
  15. ----- Black Widow ----- 
  16. Player Year Points 
  17. 8 Black Widow 2003 89 
  18. ----- Superman ----- 
  19. Player Year Points 
  20. 0 Superman 2000 23 
  21. 5 Superman 2002 34 
  22. 11 Superman 2005 87 
  23. ----- Thanos ----- 
  24. Player Year Points 
  25. 2 Thanos 2000 45 
  26. 4 Thanos 2001 76 
  27. 7 Thanos 2002 78 
  28. 10 Thanos 2004 92 
  29. """ 

堆疊

堆疊將DataFrame轉換成有多級索引,即每行有多個子部分。這些子部分是使用DataFrame的列創建的,并將其壓縮成多索引。總體而言,可以將堆疊視為將列壓縮成多索引行。

可以通過示例來說明,如下所示。

  1. df = df.stack() 
  2. print(df) 
  3. """ 
  4. 0 Player Superman 
  5. Year 2000 
  6. Points 23 
  7. 1 Player Batman 
  8. Year 2000 
  9. Points 43 
  10. 2 Player Thanos 
  11. Year 2000 
  12. Points 45 
  13. 3 Player Batman 
  14. Year 2001 
  15. Points 65 
  16. 4 Player Thanos 
  17. Year 2001 
  18. Points 76 
  19. 5 Player Superman 
  20. Year 2002 
  21. Points 34 
  22. 6 Player Batman 
  23. Year 2002 
  24. Points 23 
  25. 7 Player Thanos 
  26. Year 2002 
  27. Points 78 
  28. 8 Player Black Widow 
  29. Year 2003 
  30. Points 89 
  31. 9 Player Batman 
  32. Year 2004 
  33. Points 76 
  34. 10 Player Thanos 
  35. Year 2004 
  36. Points 92 
  37. 11 Player Superman 
  38. Year 2005 
  39. Points 87 
  40. """ 

(4)處理時間數據

Datetime庫是Python的基本庫。只要你處理與實際日期和時間信息有關的任何東西,它都是值得你使用的庫。幸好,Pandas還有使用Datetime對象的功能。

不妨舉例說明。在下面的代碼中,我們先創建一個有4列的DataFrame:Day、Month、Year和data,然后按年和月進行排序。如你所見,這非常混亂。僅僅為了存儲日期,我們就用了3列,實際上我們知道日歷日期只是一個值。

  1. from itertools import product 
  2. import pandas as pd 
  3. import numpy as np 
  4. col_names = ["Day""Month""Year"
  5. df = pd.DataFrame(list(product([101112], [89], [20182019])), 
  6. columns=col_names) 
  7. df['data'] = np.random.randn(len(df)) 
  8. df = df.sort_values(['Year''Month'], ascending=[TrueTrue]) 
  9. print(df) 
  10. """ 
  11. Day Month Year data 
  12. 0 10 8 2018 1.685356 
  13. 4 11 8 2018 0.441383 
  14. 8 12 8 2018 1.276089 
  15. 2 10 9 2018 -0.260338 
  16. 6 11 9 2018 0.404769 
  17. 10 12 9 2018 -0.359598 
  18. 1 10 8 2019 0.145498 
  19. 5 11 8 2019 -0.731463 
  20. 9 12 8 2019 -1.451633 
  21. 3 10 9 2019 -0.988294 
  22. 7 11 9 2019 -0.687049 
  23. 11 12 9 2019 -0.067432 
  24. """ 

我們可以用datetime來清理。

Pandas貼心地隨帶名為to_datetime()的函數,它可以壓縮多個DataFrame列并將其轉換成單個Datetime對象。一旦采用這種格式,你可以享用Datetime庫的所有靈活性。

想使用to_datetime()函數,需要將相關列中的所有“data”數據傳遞給它。那就是“Day”、“Month”和“Year”這三列。一旦有了Datetime格式的內容,我們不再需要其他列,刪除即可。看看下面的代碼,看看它們如何工作!

  1. from itertools import product 
  2. import pandas as pd 
  3. import numpy as np 
  4. col_names = ["Day""Month""Year"
  5. df = pd.DataFrame(list(product([101112], [89], [20182019])), 
  6. columns=col_names) 
  7. df['data'] = np.random.randn(len(df)) 
  8. df = df.sort_values(['Year''Month'], ascending=[TrueTrue]) 
  9. df.insert(loc=0, column="date", value=pd.to_datetime(df[col_names])) 
  10. df = df.drop(col_names, axis=1).squeeze() 
  11. print(df) 
  12. """ 
  13. date data 
  14. 0 2018-08-10 -0.328973 
  15. 4 2018-08-11 -0.670790 
  16. 8 2018-08-12 -1.360565 
  17. 2 2018-09-10 -0.401973 
  18. 6 2018-09-11 -1.238754 
  19. 10 2018-09-12 0.957695 
  20. 1 2019-08-10 0.571126 
  21. 5 2019-08-11 -1.320735 
  22. 9 2019-08-12 0.196036 
  23. 3 2019-09-10 -1.717800 
  24. 7 2019-09-11 0.074606 
  25. 11 2019-09-12 -0.643198 
  26. """ 

(5)將項映射到組

映射是個巧妙的技巧,有助于對分類數據進行組織。比如設想我們有一個龐大的DataFrame,有成千上萬行,其中一列含有我們想要分類的項。這么做可以大大簡化機器學習模型的訓練和有效地可視化數據。

請查看下面的代碼,這個小示例表明了我們想要分類的食品列表。

  1. import pandas as pd 
  2. foods = pd.Series(["Bread""Rice""Steak""Ham""Chicken"
  3. "Apples""Potatoes""Mangoes""Fish"
  4. "Bread""Rice""Steak""Ham""Chicken"
  5. "Apples""Potatoes""Mangoes""Fish"
  6. "Apples""Potatoes""Mangoes""Fish"
  7. "Apples""Potatoes""Mangoes""Fish"
  8. "Bread""Rice""Steak""Ham""Chicken"
  9. "Bread""Rice""Steak""Ham""Chicken"
  10. "Bread""Rice""Steak""Ham""Chicken"
  11. "Apples""Potatoes""Mangoes""Fish"
  12. "Apples""Potatoes""Mangoes""Fish"
  13. "Apples""Potatoes""Mangoes""Fish"
  14. "Bread""Rice""Steak""Ham""Chicken"
  15. "Bread""Rice""Steak""Ham""Chicken",]) 
  16. groups_dict = { 
  17. "Protein": ["Steak""Ham""Chicken""Fish"], 
  18. "Carbs": ["Bread""Rice""Apples""Potatoes""Mangoes"

在上面的代碼中,我們將列表放入到Pandas系列。我們還創建了一個字典,顯示了想要的映射,將每個食品項分類成“Protein”或“Carbs”。這是嘗試性質的示例,但如果該系列規模很大,假設有1000000項 ,那么遍歷它根本不可行。

我們可以使用Pandas內置的.map()函數編寫函數,以優化的方式執行映射,而不是使用基本的for-loop。請查看下面的代碼,看看該函數及使用方式。

  1. def membership_map(pandas_series, groups_dict): 
  2. groups = {x: k for k, v in groups_dict.items() for x in v} 
  3. mapped_series = pandas_series.map(groups) 
  4. return mapped_series 
  5.  
  6. mapped_data = membership_map(foods, groups_dict) 
  7. print(list(mapped_data)) 

在該函數中,我們先遍歷字典以創建一個新的字典,其中的鍵代表Pandas系列中每個可能的項,值代表新的映射項:“Protein”或“Carbs”。 然后,我們只需使用Pandas的內置map函數來映射該系列中的所有值。

不妨看看下面的輸出以查看結果!

['Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein']

原文標題:5 Advanced Features of Pandas and How to Use Them,作者:George Seif

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:張燕妮 來源: 51CTO
相關推薦

2012-05-08 16:40:46

Windows XP系統

2010-11-17 11:59:09

2020-12-04 19:14:19

Android功能谷歌

2016-02-18 09:33:41

2021-06-29 16:12:21

詞: 云架構混合云云計算

2022-05-12 15:43:08

數據安全數字化黑客

2010-09-30 14:51:02

保護數據安全

2010-09-09 13:15:59

提高VPN質量

2022-09-07 14:44:55

物聯網網絡安全

2020-03-16 08:48:18

Kubernetes容器云原生

2022-02-13 00:24:33

開發VueJavaScrip

2016-04-18 10:25:53

DevOps自動化

2023-06-27 10:21:14

2019-07-30 09:00:00

Snowflake數據庫性能調優

2017-04-12 22:19:20

2023-03-02 08:47:31

IT預算熱點

2023-06-09 19:03:35

開源組織

2021-11-28 21:33:20

人工智能區塊鏈物聯網

2023-07-17 09:54:57

2016-12-20 09:29:15

開源文檔領域趨勢
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国户精品久久久久久久久久久不卡 | 成人免费视频网站在线看 | 91精品国产一区二区三区 | 久久久久国产一区二区三区四区 | 中文在线a在线 | 鲁一鲁资源影视 | www在线视频 | 日韩欧美一区二区三区四区 | 久久精品在线 | 国产色播av在线 | 久久久久久亚洲国产精品 | 一级看片| 亚洲精品视频在线 | 狠狠久| 99免费精品视频 | 国产91丝袜在线18 | 久久精品视频一区二区三区 | 成人久久久久 | 久久在线 | 精品中文字幕一区 | 精品在线免费观看视频 | 成人超碰 | 日韩国产精品一区二区三区 | www.久久久.com| 91精品久久久久 | 精品国产免费人成在线观看 | 欧美性久久 | 日韩在线欧美 | 日韩激情免费 | 精品久久久久久久久久久 | 日韩国产一区 | 亚洲精品乱码久久久久v最新版 | 亚洲 欧美 日韩 精品 | 免费一级欧美在线观看视频 | 视频一区二区中文字幕 | 超碰520| 国产精品一区二区三区在线 | 久草视频在线播放 | 一级网站 | 中文字幕精品一区 | 国产在线观看不卡一区二区三区 |