數據處理和統計分析 —— Pandas 基礎(附數據集)

目錄

一、概述

(一)series

1、組成

2、創建方式

3、Series常用屬性

(二)DataFrame

1、組成:

2、構建方式

(三)數據導入和導出

二、加載數據集

加載部分數據

loc / iloc

三、分組和聚合計算

需求1:查詢每個大洲的平均年齡壽命

需求2:查詢各大洲的平均年齡和平均GDP

需求3:查詢各個大洲和國家各自的,平均年齡壽命和平均GDP

需求4:查詢各個大洲的,平均和最大GDP、年齡

需求5:查詢各個大洲的,平均GDP和最大年齡

需求6:每個大洲列出了多少個國家和地區(去重)

需求7:去重后,打印所有國家個數/打印所有國家名稱(去重后)

四、matplotlib繪圖

數據集網盤下載:
鏈接:https://pan.quark.cn/s/0e577858dba3?pwd=FJnb
提取碼:FJnb

一、概述

  • DataFrameSeries是Pandas最基本的兩種數據結構
  • Series和Python中的列表非常相似,但是它的每個元素的數據類型必須相同
  • 在Pandas中,Series是一維容器,Series表示DataFrame的每一行或每一列
  • 可以把DataFrame理解成一張表
  • 可以把DataFrame看作由Series對象組成的字典,其中key是列名,值是Series

(一)series

1、組成

  • 索引(一組與之關聯的標簽,如果不顯式的提供索引,pandas會自動創建一個從0開始的整數索引)
  • 數據(一組值(可以是任意numPy支持的數據類型:int、float、string等);

2、創建方式

????????注意:index參數可以覆蓋自動創建的索引序列(自定義)

  • 通過字典的方式創建
    import pandas as pd 
    s = pd.Series({'a':1,'b':2,'c':3,'d':4,'e':5})
    print(s)
    print(type(s))
  • 通過ndarray方式創建
    import pandas as pd 
    s = pd. Series([1,2,3,4,5])
    print(s)
    print(type(s))
  • 通過python的list方式創建
    import pandas as pd 
    import numpy as np
    arr = np.array([1,2,3,4,5])
    print(arr)
    print(type(arr))
    s = pd.Series(arr)
    print(s)
    print(type(s))
  • 通過元祖對象的方式創建
    import pandas as pd 
    s = pd.Series((1,2,3,4,5))
    print(s)
    print(type(s))

3、Series常用屬性

# 1.導入pandas模塊
import pandas as pd
import osprint(os.getcwd())
print("-------------------------------------------")# 2.創建series,創建一個csv文件
# 使用read_csv函數,返回的是DataFrame對象,而不是Series對象
df = pd.read_csv('data/nobel_prizes.csv', index_col='id')
# print(df.head()) # 獲取前5行數據# 3.創建series
# 獲取第一行數據
first = df.iloc[0]
print(first) # 獲取第一行數據
print("-------------------------------------------")
print(type(first))
print("-------------------------------------------")
print(first.dtype) # 獲取數據類型
print("-------------------------------------------")
print(first['year'],first['year'].dtype)
print("-------------------------------------------")
print(first.shape)
print("-------------------------------------------")
print(first.size)
print("-------------------------------------------")
print(first.index)
print("-------------------------------------------")
print(first.values)
  • 常用方法

# 1:導入pandas模塊
import pandas as pd# 2: 創建series對象
s1 = pd.Series([1, 2, 3, 4, 2, 3], index=['a', 'b', 'c', 'd', 'e', 'f'])
# """
# 核心區別:
# 形式          類型                  行為              返回值
# s1.max       方法對象(沒有被調用)    返回方法本身       <bound method Series.max of
# s1.max()     方法調用               執行計算操作       實際的最大值
# """
# print(s1.max)
# print(s1.max())
# print(s1.size)
# print(s1.min())
print(s1)print(s1.max)
print("--------------")
print(s1.max())
print("--------------")
print(s1.to_list()) # [1, 2, 3, 4, 2, 3]
print("--------------")
print(s1.to_list) # [1, 2, 3, 4, 2, 3]# 3:演示series的常用方法
print(len(s1)) # 6
print(s1.size) # 6
print(s1.head()) # 默認打印前五條
print(s1.head(3)) # 打印前3條
print(s1.tail())  # 默認打印后5條
print(s1.tail(3)) # 打印后3條
print(s1.index) # Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
print(s1.keys())  # Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
print(s1.values) # [1 2 3 4 2 3]
print(s1.to_list()) # [1, 2, 3, 4, 2, 3]
print(type(s1.to_list())) # <class 'list'>print("---------------------------")
print(s1.describe()) # 統計信息
print(s1.max())     # 獲取series的元素最大值
print(s1.min())       # 獲取series的元素最小值
print(s1.mean())      # 獲取series的元素平均值
print(s1.median())    # 獲取series的元素中位數
print(s1.mode())      # 獲取series的元素眾數
print(s1.std())       # 獲取series的元素標準差print("---------------------------")
print(s1.drop_duplicates())# 刪除重復的元素
print(s1.sort_values())# 排序,根據值排序,默認是升序
print(s1.sort_values())# 排序,根據值排序,默認是升序
print(s1.sort_values(ascending=False))# 排序,根據值排序,降序
print(s1.sort_index())  # 排序,根據索引排序,默認是升序
print(s1.sort_index(ascending=False)) # 排序,根據索引排序,降序
print(s1.unique()) # 去重
print(s1.value_counts()) # 統計每個元素出現的次數

(二)DataFrame

  • 可以看成是一個二維表格(行列),類似于Excel表格
  • 每一列就是一個series,所有列共享一個索引

1、組成:

  • 列: 每一列就是一個series,所有的列共享同一個索引
  • 行: 由索引標記的每一行數據(行索引)
  • 索引: 行的標簽,稱之為行索引,如果不指定,pandas會自動創建(0,1,2....)
  • 列索引(column): 列的標簽,也稱為列名。

2、構建方式

使用字典來創建DataFrame

import pandas as pd
s = {'name':['張三','李四','王五'],'age':[18,19,31],'sex':['男','女','男']}
df = pd.DataFrame(s)
print(df)
print(type(df))

創建DataFrame的時指定列的順序和行索引

# 創建DataFrame的時指定列的順序和行索引
import pandas as pd
df = pd.DataFrame({'name':['張三','李四','王五'],'age':[18,19,31],'sex':['男','女','男']},index=['a','b','c'],columns=['name','age','sex','id'])
print(df)
print(type(df))

(三)數據導入和導出

1、保存pickle文件
????????可以使用pd.read_pickle函數讀取.pickle文件中的數據

import pandas as pd
# 讀取movie.csv文件
movie_fd = pd.read_csv('data/movie.csv')
# 將讀取的數據保存為pickle文件
movie_fd.to_pickle('data/movie.pickle')
movie_fd.head()

2、保存csv文件
????????在CSV文件中,對于每一行,各列采用逗號分隔
????????CSV是數據協作和共享的首選格式

import pandas as pd
movie_fd.to_csv('data/movie2.csv')
movie_fd2 = pd.read_csv('data/movie2.csv')
movie_fd2.head()

二、加載數據集

目的:
? ? ? ? 1、做數據分析首先要加載數據,并查看其結構和內容,對數據有初步的了解
? ? ? ? 2、查看行,列數據分布情況
? ? ? ? 3、查看每一列中存儲信息的類型

import pandas as pddata = pd.read_csv('data/movie.csv')  # 讀取數據
print(data.head())  # 查看前5行數據# 也可以通過指定分隔符加載tsv文件
data = pd.read_csv('data/gapminder.tsv', sep='\t')
data.head()

加載部分數據

加載一列數據,通過df['列名']方式獲取

print(df['movie_title'])

加載多列數據,通過df[['列名1','列名2',...]]

print(df[['movie_title', 'imdb_score']])

獲取第4行數據

獲取第1行和第62行和83行數據

print(df.loc[[3]]) 
print(df.loc[[0, 61, 82]]) 

loc / iloc

需要注意的是,iloc傳入的是索引的序號,loc是索引的標簽
????????如果loc 和 iloc 傳入的參數弄混了,會報錯
loc 只能接受行/列 的名字,iloc只能接受行/列的序號

# 獲取第1行和第62行和83行數據
print(df.iloc[[0, 61, 82]])
# 獲取前3行數據
print(df.iloc[:3])
# 使用iloc時可以傳入-1來獲取最后一行數據,使用loc的時候不行
print(df.iloc[[-1]])

import pandas as pddf = pd.read_csv('data/scientists.csv')print(df.loc[0, ['Name', 'Age', 'Born']])  # 獲取第1行數據的三列數據
print("-----------------------------------------------------------------------")
print(df.loc[[0, 1], ['Name', 'Age', 'Born']])  # 獲取第1行和第2行數據,三列數據
print("-----------------------------------------------------------------------")
tmp_range = list(range(3, 5))
print(tmp_range)  # 獲取連續多列數據
print(df.iloc[:, tmp_range])
print("-----------------------------------------------------------------------")
print(df.iloc[0, 1])  # 獲取第1行第2列數據
print("-----------------------------------------------------------------------")
print(df.iloc[[0, 1, 5], [1, 2]])  # 獲取第1行和第2行第6行、第2列和第3列數據
print("-----------------------------------------------------------------------")
print(df.iloc[0:3, 0:3])  # 獲取第1行到第3行、第1列到第3列數據
print("-----------------------------------------------------------------------")
print(df.iloc[:, 1:5:2])  # 獲取第2列到第5列、步長為2的數據
print("-----------------------------------------------------------------------")
# 獲取第1列、第3列、第4列的數據
print(df.iloc[:, [True, False, True, True, False]])

知識點總結

三、分組和聚合計算

需求1:查詢每個大洲的平均年齡壽命

# 分組操作
print(df.groupby('continent'))
# 寫法一
print(df.groupby('continent')['lifeExp'].mean())
print("--------------------------------------------------")
# 寫法二
print(df.groupby('continent').lifeExp.mean())

需求2:查詢各大洲的平均年齡和平均GDP

print(df.groupby('continent')[['lifeExp','gdpPercap']].mean())

需求3:查詢各個大洲和國家各自的,平均年齡壽命和平均GDP

print(df.groupby(['continent','country'])[['lifeExp','gdpPercap']].mean())

需求4:查詢各個大洲的,平均和最大GDP、年齡

# 寫法1:
print(df.groupby('continent')[['lifeExp','gdpPercap']].aggregate(['mean','max']))

需求5:查詢各個大洲的,平均GDP和最大年齡

# 寫法2:
print(df.groupby('continent').aggregate({'lifeExp':'mean','gdpPercap':'max'}))

需求6:每個大洲列出了多少個國家和地區(去重)

print(df.groupby('continent')['country'].nunique())
print("--------------------------------------------------")
# 每個大洲列出了多少個國家(不去重)
print(df.groupby('continent')['country'].size())

需求7:去重后,打印所有國家個數/打印所有國家名稱(去重后)

print(df['country'].nunique())  
print(df['country'].unique())   
運行結果:
142
['Afghanistan' 'Albania' 'Algeria' 'Angola' 'Argentina' 'Australia''Austria' 'Bahrain' 'Bangladesh' 'Belgium' 'Benin' 'Bolivia''Bosnia and Herzegovina' 'Botswana' 'Brazil' 'Bulgaria' 'Burkina Faso''Burundi' 'Cambodia' 'Cameroon' 'Canada' 'Central African Republic''Chad' 'Chile' 'China' 'Colombia' 'Comoros' 'Congo, Dem. Rep.''Congo, Rep.' 'Costa Rica' "Cote d'Ivoire" 'Croatia' 'Cuba''Czech Republic' 'Denmark' 'Djibouti' 'Dominican Republic' 'Ecuador''Egypt' 'El Salvador' 'Equatorial Guinea' 'Eritrea' 'Ethiopia' 'Finland''France' 'Gabon' 'Gambia' 'Germany' 'Ghana' 'Greece' 'Guatemala' 'Guinea''Guinea-Bissau' 'Haiti' 'Honduras' 'Hong Kong(China)' 'Hungary' 'Iceland''India' 'Indonesia' 'Iran' 'Iraq' 'Ireland' 'Israel' 'Italy' 'Jamaica''Japan' 'Jordan' 'Kenya' 'Korea, Dem. Rep.' 'Korea, Rep.' 'Kuwait''Lebanon' 'Lesotho' 'Liberia' 'Libya' 'Madagascar' 'Malawi' 'Malaysia''Mali' 'Mauritania' 'Mauritius' 'Mexico' 'Mongolia' 'Montenegro''Morocco' 'Mozambique' 'Myanmar' 'Namibia' 'Nepal' 'Netherlands''New Zealand' 'Nicaragua' 'Niger' 'Nigeria' 'Norway' 'Oman' 'Pakistan''Panama' 'Paraguay' 'Peru' 'Philippines' 'Poland' 'Portugal''Puerto Rico' 'Reunion' 'Romania' 'Rwanda' 'Sao Tome and Principe''Saudi Arabia' 'Senegal' 'Serbia' 'Sierra Leone' 'Singapore''Slovak Republic' 'Slovenia' 'Somalia' 'South Africa' 'Spain' 'Sri Lanka''Sudan' 'Swaziland' 'Sweden' 'Switzerland' 'Syria' 'Taiwan(China)''Tanzania' 'Thailand' 'Togo' 'Trinidad and Tobago' 'Tunisia' 'Turkey''Uganda' 'United Kingdom' 'United States' 'Uruguay' 'Venezuela' 'Vietnam''West Bank and Gaza' 'Yemen, Rep.' 'Zambia' 'Zimbabwe']

四、matplotlib繪圖

import pandas as pd
import matplotlib.pyplot as pltdf = pd.read_csv('data/gapminder.tsv', sep='\t')
globals_yearly_life_expectancy = df.groupby('year')['lifeExp'].mean()
print(globals_yearly_life_expectancy)
globals_yearly_life_expectancy.plot()
plt.show()

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

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

相關文章

github 如何在 readme 顯示Star History

在GitHub的README文件中顯示Star History&#xff08;星標歷史&#xff09;圖表&#xff0c;可以通過以下幾種方式實現&#xff1a; 使用Star History服務 你可以使用Star History服務來生成并嵌入星標歷史圖表 。具體步驟如下&#xff1a; 訪問 Star History 網站: https:/…

安全防范方案

一、基于地理位置的訪問控制&#xff08;核心方案&#xff09; 原理&#xff1a;通過內置GeoIP數據庫或第三方IP庫識別訪問源國家/地區&#xff0c;動態攔截非目標區域IP。 配置步驟&#xff1a; 啟用GeoIP模塊 登錄管理控制臺 → 安全策略 → 地理位置策略 → 加載MaxMind Ge…

Python爬蟲實戰:研究optimesh庫,構建Github網格數據采集系統

1. 引言 1.1 研究背景與意義 在計算機輔助設計(CAD)、有限元分析(FEA)、計算流體力學(CFD)等領域,網格作為離散化連續空間的基礎載體,其質量直接影響數值模擬的精度與效率。高質量的網格應具備單元形狀規則、分布均勻、邊界貼合度高等特征,而低質量網格可能導致計算…

利用Qwen大模型進行c++11并發庫的學習,與時俱進!!!!

文章目錄 1、學習新的東西可以借助ai和官方文檔 1.1 會問問題 異步編程教程 1. std::future 2. std::shared_future 3、std::promise 4、4. std::packaged_task 5. std::async 6. std::future_status 和等待函數 綜合代碼 總結 1、學習新的東西可以借助ai和官方文檔 因為別人寫…

曲面/線 擬合gnuplot

1. 下載gnuplot windows 版&#xff0c;安裝&#xff0c;&#xff08;別的綠色的可能下載即用&#xff0c;推薦下面鏈接這款&#xff09; gnuplot - Browse Files at SourceForge.net 2. 準備數據&#xff0c;存成data.dat或者其它文件名稱&#xff0c;放桌面 數據內容如下…

CentOS Linux 7 (Core)上部署Oracle 11g、19C RAC詳細圖文教程

一、部署參考鏈接&#xff1a; 墨天輪數據庫社區 - 樂知樂享&#xff0c;同心共濟 實戰篇&#xff1a;一步步教你 Linux 7 安裝 Oracle 11GR2 RAC 實戰篇&#xff1a;Linux7 安裝 Oracle 19C RAC 詳細圖文教程 Linux7 安裝 Oracle 19C RAC 詳細圖文教程

WebSocket DevTools 開發調試工具完全指南 – 實時監控、消息攔截、性能分析一站式解決方案

概述 WebSocket DevTools 是一款專為 WebSocket 連接調試而設計的瀏覽器開發者工具擴展。它提供了實時監控、消息攔截、連接管理等功能&#xff0c;幫助開發者快速定位和解決 WebSocket 相關問題。 主要特性 &#x1f50d; 實時監控&#xff1a;實時顯示 WebSocket 連接狀態…

常見的光源頻閃控制方式

一、光源頻閃的優勢消除運動模糊&#xff0c;提升成像質量 光源以極短脈沖&#xff08;微秒級&#xff09;與相機曝光嚴格同步&#xff0c;實現“瞬時凍結”高速運動物體。增強特征對比度&#xff0c;提高缺陷檢出率 頻閃模式下&#xff0c;LED可短時超負荷工作&#xff0c;峰值…

讀From GPT-2 to gpt-oss: Analyzing the Architectural Advances(續)

序 本篇由來&#xff0c;在COC上我當面感謝了組委會和姜寧老師&#xff0c;隨即被姜寧老師催稿&#xff0c;本來當天晚上寫了一個流水賬&#xff0c;感覺甚為不妥。于是決定慢慢寫&#xff0c;緩緩道來。要同時兼顧Show me the code&#xff0c;Show me the vide。希望能形成一…

6-7 TIM編碼器接口 [江科協STM32]

一、引入&#xff08;1&#xff09;編碼器接口的好處&#xff1a;節約軟件資源&#xff1a;外部中斷計次&#xff0c;程序頻繁進入中斷&#xff0c;則軟件資源會被簡單頻繁的工作給占用&#xff0c;效率不高使用定時器的編碼器接口&#xff0c;再配合編碼器&#xff0c;就可以測…

01數據結構-交換排序

01數據結構-交換排序1.冒泡排序1.1基礎冒泡排序1.1.1基礎冒泡排序代碼實現1.2冒泡排序的一次優化1.2.1冒泡排序的第一次優化代碼實現1.3冒泡排序的二次優化1.3.1 冒泡排序的二次優化代碼實現2.快速排序2.1雙邊循環法2.1.1雙邊循環法的代碼實現2.2單邊循環法2.2.1單邊循環法代碼…

MySQL架構和儲存引擎

MySQL服務器整體架構如下&#xff1a;連接層&#xff1a;連接層的作用是處理客戶端的連接&#xff0c;如何管理連接的。網絡端口和連接管理線程&#xff1a;網絡端口&#xff1a;一臺服務器可以連接網絡上多個端口的客戶連接&#xff0c;只需要開放多個端口&#xff0c;只需要在…

詳解flink java基礎(一)

文章目錄1.流式處理flink介紹2.Flink SQL介紹3. Flink Runtime4.使用flink集成kafka5.使用Flink SQL進行有狀態流處理6.Event time & Watermarks7. flink Checkpoints & recovery1.流式處理flink介紹 實時服務依賴流式處理: flink優點: 高性能豐富的特性&#xff1a…

Day119 持續集成docker+jenkins

Day119 dockerjenkins 1.Dockerfile Dockerfile 可以用于項目部署。通過編寫 Dockerfile&#xff0c;可以將整個項目及其所需的依賴項打包到一個 Docker 鏡像中&#xff0c;然后在任何支持 Docker 的環境中部署和運行該鏡像 Dockerfile 是用于構建 Docker 鏡像的文本文件。它包…

Vue3+Vite MPA多頁面應用開發完整指南 – 從零搭建到部署優化

什么是 MPA 多頁面應用 MPA&#xff08;Multi-Page Application&#xff09;是由多個獨立的 HTML 頁面組成的應用&#xff0c;每個頁面都有獨立的入口文件。與 SPA 不同&#xff0c;MPA 的每個頁面都是獨立的&#xff0c;頁面間通過鏈接跳轉&#xff0c;適合大型項目或需要 SE…

【企業級架構】企業戰略到技術落地的全流程【第一篇】

目錄 一、人生藍圖與企業羅盤&#xff1a;戰略視角下的成長架構 1. 大學畢業迷茫期 → 企業未制定戰略前&#xff1a;無方向、無目標? 2. 制定職業規劃 → 企業戰略制定&#xff1a;明確 “去哪” 和 “分幾步走”? 3. 盤點自身能力差距 → 業務架構梳理&#xff1a;搞清…

(二) Python + 地球信息科學與技術 = 經典案例分析

目錄 四、農業精準施肥與產量預測&#xff08;植被指數 機器學習&#xff09; 五、公共場所踩踏事故預警系統&#xff08;時空大數據 Web 開發&#xff09; 六、森林火災智能識別與救援路徑規劃&#xff08;遙感 路徑優化&#xff09; 七、海岸線侵蝕動態監測與防護&…

從需求到部署全套方案:餐飲服務許可證數據可視化分析系統的大數據技術實戰

&#x1f393; 作者&#xff1a;計算機畢設小月哥 | 軟件開發專家 &#x1f5a5;? 簡介&#xff1a;8年計算機軟件程序開發經驗。精通Java、Python、微信小程序、安卓、大數據、PHP、.NET|C#、Golang等技術棧。 &#x1f6e0;? 專業服務 &#x1f6e0;? 需求定制化開發源碼提…

Qt 關于QString和std::string數據截斷的問題- 遇到\0或者0x00如何處理?

Qt 關于QString和std::string數據截斷的問題- 遇到\0或者0x00如何處理&#xff1f;引言一、解決方案二、使用QByteArray注意事項引言 在Qt開發中&#xff0c;使用QString或std::string獲取、發送字符串時&#xff0c;遇到\0(空字符)或者0x00(十六進制表示)可能導致數據截斷&am…

Spring Cloud LoadBalancer 最佳實踐

Ribbon 曾經是 Spring Cloud 家族默認的客戶端負載均衡工具&#xff0c;而 Spring Cloud LoadBalancer (SCLB) 是官方替換 Ribbon 的新實現。表面上它們都解決 “服務調用時選哪個實例” 的問題&#xff0c;但在理念、架構和生態上差異不小。一、Ribbon vs SCLB1. 定位和生態…