Pandas學習筆記(四)

DataFrame對象

文章目錄

  • DataFrame對象
      • 導入本文需要的包
      • DataFrame與Series的相似之處
        • 使用`read_csv`函數導入DataFrame
        • Series和DataFrame的共享與專有屬性
        • Series和DataFrame的共有方法
      • 對DataFrame進行排序
        • 按照單列進行排序
        • 按照多列進行排序
        • 按照索引進行排序
        • 對列索引進行排序
      • 設置索引
      • 從DataFrame中選擇列
        • 從DataFrame中選擇單列
        • 從DataFrame中選擇多列
      • 從DataFrame中選擇行
        • 使用索引標簽提取行
        • 按索引位置提取行
        • 從特征列中提取特征值
      • 對行或列進行重命名
      • 重置索引
      • 代碼挑戰
        • 解決方案

DataFrame是具有行和列的二維數據表,相比于Series,DataFrame可以有很多列。并且DataFrame很多操作與Series相似

導入本文需要的包

import pandas as pd
import numpy as np

通過字典創建DataFrame

city_data = {"City": ["New York City", "Paris", "Barcelona", "Rome"],"Country": ["United States", "France", "Spain", "Italy"],"Population": [8600000, 2141000, 5515000, 2873000]
}
cities = pd.DataFrame(city_data)
cities

DataFrame與Series的相似之處

使用read_csv函數導入DataFrame
nba = pd.read_csv("./pandas-in-action-master/chapter_04_the_dataframe_object/nba.csv",parse_dates=["Birthday"])
nba
Series和DataFrame的共享與專有屬性

Series只有一列,所以其只有一個dtype屬性。而DataFrame有很多

pd.Series([1, 2, 3]).dtype
nba.dtypes

注意Series是dtype,DataFrame是dtypes

查看列名:

nba.columns

查看維度:

nba.shape

計算數值總數:

nba.size

這樣得到的事包含缺失值的數量,如果想要查看排出缺失值的總數,可以用下面這種方法

nba.count().sum()
Series和DataFrame的共有方法
nba.head(2)
nba.tail(n = 3)
nba.sample(3)
nba.max()
nba.min()
nba.nlargest(n = 4, columns = "Salary")
# 只對數字字段加和
nba.sum(numeric_only = True)
nba.mean(numeric_only = True)
nba.median(numeric_only = True)
nba.mode(numeric_only = True)
nba.std(numeric_only = True)

對DataFrame進行排序

按照單列進行排序
nba.sort_values("Name")
nba.sort_values(by = "Name")
nba.sort_values(by = "Name", ascending = False) # 降序
按照多列進行排序
nba.sort_values(by = ["Team", "Name"])
# 還可以指定每一列是升序還是降序
nba.sort_values(by = ["Team", "Name"], ascending = [True, False])
按照索引進行排序
# 在存儲排序之后,我們還可以通過對索引排序來恢復
nba = nba.sort_values(by = ["Team", "Name"], ascending = [True, False])
nba
nba = nba.sort_index()
nba
對列索引進行排序
nba.sort_index(axis = "columns")
nba.sort_index(axis = 1)

設置索引

nba.set_index(keys = "Name")
nba.set_index("Name")
nba = nba.set_index("Name") # 覆蓋

上面兩種是相同的

從DataFrame中選擇列

從DataFrame中選擇單列
nba.Salary

這種方式返回的是對應的Series

還可以:

nba[("Salary")]

這種方法的優點是支持帶空格的列名,如果列名帶空格只能通過方括號來提取

從DataFrame中選擇多列
nba[["Salary", 'Birthday']]

中括號里的順序變了,輸出的順序也會變

nba[['Birthday', 'Salary']]

可以使用select_dtypes方法,根據數據類型選擇列。該方法接受兩個參數includeexclude。參數接收單個字符串或列表,表示Pandas應保留或丟棄的列類型。

nba.select_dtypes(include = "object")
nba.select_dtypes(exclude = ["object", "int"])

從DataFrame中選擇行

使用索引標簽提取行
nba.loc["LeBron James"]
nba.loc[["LeBron James", "Paul George"]]

同樣的索引時的順序,代表輸出的順序

還支持Python的列表切片語法

nba.sort_index().loc["Otto Porter" : "Patrick Beverley"]
nba.sort_index().loc["Zach Collins":]
nba.sort_index().loc[:"Al Horford"]

loc切片包括上限的值,但列表切片不包括上限的值

按索引位置提取行
nba.iloc[300]
nba.iloc[[100, 200, 300, 400]]
nba.iloc[400:404]
nba.iloc[:2]
nba.iloc[447:]
從特征列中提取特征值
nba.loc["Giannis Antetokounmpo", "Team"]
nba.loc["James Harden", ["Position", "Birthday"]]
nba.loc[["Russell Westbrook", "Anthony Davis"], ["Team", "Position"]]
nba.loc["Joel Embiid", "Position" : "Salary"]
nba.iloc[57, 3]

使用lociloc的時因為Pandas要先確定傳入的數據類型,所以運行速度較慢。如果只需要提取單個值的時候,可以用at代替loc,用iat代替iloc,使代碼的運行速度更快。其中at系列和loc系列的使用方法類似。同時at系列也可以用于Series

對行或列進行重命名

查看列名:

nba.columns

可以通過為該屬性分配新名稱來重命名DataFrame的任何或所有列

nba.columns = ["Team", "position", "Date of Birth", "Pay"]

還可以通過rename傳入一個字典實現,其中字典的值是新的名稱

nba = nba.rename(columns = {"Date of Birth": "Birthday"})

將上面代碼中的columns換位index就為更改索引名稱

重置索引

現在我想要將Team作為新的索引,但我直接通過set_index更改會導致Name列數據的丟失

nba.set_index("Team").head()

我們可以通過reset_index之前的索引替換為數字索引,并且那一列會被保留,再更換索引

nba.reset_index().set_index("Team").head()

代碼挑戰

nfl.csv 文件包含美國國家橄欖球聯盟中與 NBA 相似的數據結構,包括球員的 Name、Team、Position、Birthday 和 Salary 信息。嘗試回答如下問題:

  1. 如何導入 nfl.csv 文件,并將其 Birthday 列中的值轉換為日期時間類型?
  2. 可以通過哪兩種方式設置 DataFrame 索引來存儲球員姓名?
  3. 如何計算這個數據集中每支球隊的球員人數?
  4. 收入最高的 5 名球員是誰?
  5. 如何先按球隊名稱升序對數據集進行排序,然后按薪資降序對數據集進行排序?
  6. New York Jets 隊年齡最大的球員是誰,他的生日是哪天?
解決方案
# 1
nfl = pd.read_csv("./pandas-in-action-master/chapter_04_the_dataframe_object/nfl.csv", parse_dates=["Birthday"])# 2
nfl = pd.read_csv("./pandas-in-action-master/chapter_04_the_dataframe_object/nfl.csv", parse_dates=["Birthday"], index_col = "Name")
nfl = pd.read_csv("./pandas-in-action-master/chapter_04_the_dataframe_object/nfl.csv", parse_dates=["Birthday"])
nfl = nfl.set_index("Name")# 3
nfl.Team.value_counts()# 4
nfl.sort_values(by = "Salary", ascending = False)# 5
nfl.sort_values(by = ["Team", "Salary"], ascending = [True, False])# 6
# 先將Team列設置為索引
nfl = nfl.reset_index().set_index("Team")
nfl.loc["New York Jets"].sort_values("Birthday").head(1)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80416.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DA14585墨水屏學習(2)

一、user_svc2_wr_ind_handler函數 void user_svc2_wr_ind_handler(ke_msg_id_t const msgid,struct custs1_val_write_ind const *param,ke_task_id_t const dest_id,ke_task_id_t const src_id) {// sprintf(buf2,"HEX %d :",param->length);arch_printf("…

樹莓派5+Ubuntu24.04 LTS串口通信 保姆級教程

【背景】 各位,除了樹莓派4B之外,我又搞了個樹莓派5, 裝的也是Ubuntu24.04 LTS服務器版。裝系統的方法跟樹莓派4B一樣,沒什么好說的。裝完了系統之后,我就想裝個wiringPi來試試串口,卻發現這個樹莓派5的串口和樹莓派4…

【QT】UDP通訊本地調試

qt已經寫好了udp通訊代碼,現在要進行測試。 1、終端輸入ipconfig查看本機網卡的ipv4地址 2、 用udpBind函數,綁定到此ip和自定義的端口號。 3、 打開網絡調試助手,自動檢測到本機的ip地址,輸入任意一個和程序里不一樣的端口號。 …

在 Elasticsearch 中連接兩個索引

作者:來自 Elastic Kofi Bartlett 解釋如何使用 terms query 和 enrich processor 來連接 Elasticsearch 中的兩個索引。 更多有關連接兩個索引的查詢,請參閱文章 “Elastic:開發者上手指南” 中的 “豐富數據及 lookup” 章節。 Elasticsea…

LabVIEW的PID參數自適應控制

在工業控制領域,PID 控制憑借結構簡單、穩定性好、工作可靠等優點被廣泛應用。然而,傳統固定參數的 PID 控制在面對復雜多變的工況時,控制效果往往難以達到最優。基于 LabVIEW 實現 PID 控制根據情況選擇參數(即參數自適應調整&am…

[redis進階四]分布式系統之哨兵(2)

目錄 一 利用docker搭建環境 板書: 一)準備?作: 板書: 解讀docker配置文件: 1)安裝docker和docker-compose 2) 停?之前的redis-server 3) 使?docker獲取redis鏡像 二)編排redis主從節點 板書:?編輯 1) 編寫docker-compose.yml 2) 啟動所有容器 3) 查看運??志 …

spark-Schema 定義字段強類型和弱類型

在數據處理和存儲中,Schema(模式)定義了數據的結構和字段屬性,其中字段的強類型和弱類型是重要的概念,直接影響數據的驗證、存儲和處理方式。以下是詳細解釋: 1. 強類型(Strongly Typed&#x…

2024睿抗編程賽國賽-題解

2024睿抗編程賽國賽題解 RC-u1 大家一起查作弊 題目重述 我們需要從給定的多行字符串中提取出所有的關鍵詞,并計算這些關鍵詞的可疑分數總和、總長度以及關鍵詞的數量。具體步驟如下: 關鍵詞定義:由大寫字母、小寫字母、數字組成的字符串&a…

控制LED燈設備

本章分別使用C庫和系統調用的文件操作方式控制開發板的LED燈,展示如何在應用層通過系統提供的設備文件控制相關硬件。 本章的示例代碼目錄為:base_code/linux_app/led/sys_class_leds。 9.1. LED子系統 在Linux系統中,絕大多數硬件設備都有…

SpringBoot學習(上) , SpringBoot項目的創建(IDEA2024版本)

目錄 1. SpringBoot介紹 SpringBoot特點 2. SpringBoot入門 2.1 創建SpringBoot項目 Spring Initialize 第一步: 選擇創建項目 第二步: 選擇起步依賴 第三步: 查看啟動類 2.2 springboot父項目 2.3 測試案例 2.3.1 數據庫 2.3.2 生成代碼 1. SpringBoot介紹 Spring B…

在 Ubuntu 中配置 Samba 實現「特定用戶可寫,其他用戶只讀」的共享目錄

需求目標 所有認證用戶可訪問 Samba 共享目錄 /path/to/home;**僅特定用戶(如 developer)**擁有寫權限;其他用戶僅允許讀取;禁止匿名訪問。 配置步驟 1. 設置文件系統權限 將目錄 /home3/guest 的所有權設為 develo…

ENSP-OSPF綜合實驗

AR4中通過ospf獲取的其他區域路由信息,并且通過路由匯總后簡化路由信息 實現全網通,以及單向重發布,以及通過缺省雙向訪問, 通過stub簡化過濾四類五類lsa,簡化ospf路由信息 通過nssa簡化ospf信息 區域匯總簡化R4路由信…

linux(centos)聯網情況下部署

nginx部署 1.linux(centos)聯網情況下部署 1.下載nginx所需依賴 # 安裝開發工具組(若未安裝) sudo yum groupinstall "Development Tools"# 安裝 OpenSSL 開發包 sudo yum install openssl-devel# 安裝 PCRE 開發包 sudo yum install pcre-…

LeetCode 1550.存在連續三個奇數的數組:遍歷

【LetMeFly】1550.存在連續三個奇數的數組:遍歷 力扣題目鏈接:https://leetcode.cn/problems/three-consecutive-odds/ 給你一個整數數組 arr,請你判斷數組中是否存在連續三個元素都是奇數的情況:如果存在,請返回 tr…

Android Framework學習四:init進程實現

文章目錄 init流程簡介init源碼執行順序執行順序 init進程的具體工作事項掛載文件系統設置 SELinuxSecondStageMaininit.rc啟動zygote和serviceManager進程的重要性serviceManager工作原理 Framework學習之系列文章 init流程簡介 下面圖片主要圍繞 Android 系統中init進程的運…

HTTP/3展望、我應該遷移到HTTP/2嗎

1. HTTP/3展望 HTTP/3 基于 QUIC 協議,完全解決了“隊頭阻塞”問題,弱網環境下的表現會優于 HTTP/2;QUIC 是一個新的傳輸層協議,建立在 UDP 之上,實現了可靠傳輸;QUIC 內含了 TLS1.3,只能加密通…

【大模型面試每日一題】Day 15:流水線并行的Bubble問題及其緩解方法

【大模型面試每日一題】Day 15:流水線并行的Bubble問題及其緩解方法 📌 題目重現 🌟🌟 面試官:解釋流水線并行(Pipeline Parallelism)的bubble問題及其緩解方法。 #mermaid-svg-Uz7WGsO8akW5F…

Windows環境下maven的安裝與配置

1.檢查JAVA_HOME環境變量 Maven是使用java開發的,所以必須知道當前系統環境中的JDK的安裝目錄。 搜索欄直接輸入“cmd” 或者 WinR 輸入cmd 在打開的終端窗口輸入“echo %JAVA_HOME”,就可以看到jdk的位置了。 如果沒有的話,請參考我的文章&a…

Kubernetes 集群部署應用

部署 Nginx 應用 命令行的方式 1. 創建 deployment 控制器的 pod # --imagenginx:這個會從 docker.io 中拉取,這個網站拉不下來 # kubectl create deployment mynginx --imagenginx# 使用國內鏡像源拉取 kubectl create deployment mynginx --imaged…

如何使用依賴注入來實現依賴倒置原則?

依賴注入(Dependency Injection, DI)是實現依賴倒置原則(DIP)的具體技術手段,它通過將依賴對象的創建和管理交給外部容器,從而實現高層模塊與低層模塊的解耦。下面從原理、實現方式、框架應用及最佳實踐四個方面詳細解析: 一、依賴倒置原則(DIP)的核心思想 高層模塊不…