pandas學習筆記

前言

? ? ? ? 總結才是知識,作者習慣不好,不會總結,導致函數一旦不使用就會忘記怎么使用,特此寫了本文,用于給自己一個復習的資料.

? ? 提示:如果你是小白,每個代碼請自己敲打。

一 pandas的介紹

Pandas is a python library used for working with data sets

It has functions for analyzing ,cleaning,exploring and mainpulating data

The name "pandas" has a reference to both "Panel Data" and "Python Data Analysis" and was created by Wes Mckinney in 2008

二 pandas Series

Series 是一個包含任何數據類型的數據的一維數組,就像表中的一列。(注意:首字母大寫)

2.1 語法:

import pandas as pdpd.Series(data,index,dtype)
# 參數介紹
# data :一維數組(ndarray 類型)
# index:數據索引標簽(可以是字符串類型、數字或者混合),默認是從0開始,可以重復
# dtype:數據類型,會根據數組內值類型返回結果
  • dtype :

數據類型 ? ?描述 ? ? ?內存占用 ? ? ? ?精度范圍 ? ? ? ? ? ? ?使用場景

'i4' ? ?32 位整數 ? ? ?4 字節 ? ? ? ?-2^31 至 2^31-1 ? ? ?小范圍整數,如索引或計數器

'i8' ? ?64 位整數 ? ? ?8 字節 ? ? ? ?-2^63 至 2^63-1 ? ? ?大范圍整數,如時間戳或 ID

'f4' ? ?32 位浮點數 ? ? 4 字節 ? ? ? ?約 7 位有效數字 ? ? ? ?低精度計算,如圖像處理

'f8' ? ?64 位浮點數 ? ? 8 字節 ? ? ? ?約 15 位有效數字 ? ? 高精度計算,如科學分析

2.2 如何創建Series

import pandas as pd
import numpy as np
# 創建空的Series
s_1 = pd.Series() # 所有的值都是默認值 dtype:object# 使用numpy中的ndarray創建 Series
arry = np.random.randn(5)
s_2 = pd.Series(data=arry)# 使用列表創建
l_1 = [1,2,3]
s_3=pd.Series(data=l_1)# 使用字典創建
dict1 = {"小張":1,"小明":2,"小紅":3}
s_4=pd.Series(data=dict1)# 使用標量創建
s_5= pd.Series(data=10,index=range(0,10))

2.3 針對Series的操作

  • ?修改index
s_4.index=[0,1,2]print(s_4)
  • #刪除特定的值
Series.drop(labels=None, *, axis=0, index=None,level=None, inplace=False, errors='raise')
## 參數
# ? labels: 單個標簽或標簽列表。指定要從 Series 中刪除的索引標簽。
# ? axis: 只能為 0 或 index,因為 Series 是一維數據結構,僅支持沿索引方向操作。
# ? index: 替代參數,用于直接指定要刪除的索引。與 labels 功能相同,但更直觀。
# ? level: 如果索引是 MultiIndex,則可以指定刪除哪一層級的索引。
# ? inplace: 布爾值。如果設置為 True,則直接在原 Series 上進行修改;否則返回一個新的 Series。
# ? errors: 字符串。如果設置為 'ignore',當指定的標簽不存在時不會拋出錯誤,而是忽略該標簽;默認值為 'raise',會拋出錯誤。print(s_4.drop(labels=0))
print(s_4.drop(index=[0,1]))
print(s_4) # 因為inplace=False,因此不會改變Series# 切片操作-等同于列表
print(s_4[-2:])
  • 基本運算(+-*/)index為Key
## 注意:如果索引大小不同,則較小索引的Series中與較大Serise中相同index值為NON
#+
print(s_2+s_5)
print(s_2.add(s_5))
#-
print(s_2-s_5)
print(s_2.sub(s_5))
#*
print(s_2*s_5)
print(s_2.mul(s_5))
#/
print(s_2/s_5)
print(s_2.div(s_5))
#統計
print(s_2.describe())
  • ?特殊方法——where (對于滿足不等式的元素重新賦值)
#創建一個簡單的 Series
s = pd.Series([10, 20, 30, 40, 50])#替換所有小于 30 的值為 NaN
result1 = s.where(s >= 30)
print("示例 1:")
print(result1)#替換所有小于 30 的值為 -1
result2 = s.where(s >= 30, -1)
print("\n示例 2:")
print(result2)#使用另一個 Series 作為替代值
alt_values = pd.Series([-1, -2, -3, -4, -5])
result3 = s.where(s >= 30, alt_values)
print("\n示例 3:")
print(result3)
  • concat 拼接兩個Series
import pandas as pd
s1 = pd.Series([10, 20, 30, 40, 50])
s2 = pd.Series([11, 20, 30, 40, 50])
s3 = pd.concat([s1, s2], ignore_index=True)
print(s3)

三 DataFrame

之前介紹了 Series,在表格中相當于一列的值,但是我們操作表的時候時既有橫向的還有列項的。

那現在就需要引入另外一個定義 DataFrame,當讀取一個表格的時候會將數據直接轉換成DataFrame格式

  • DataFrame:A Pandas DataFrame is a 2 dimensional data structure, like a 2 dimensional array ,or a table with rows and columns
import pandas as pdpd.DataFrame(data=None,index=None,columns=None)data:數據
index:設置行的名稱
columns: 設置列的名稱
  • ?如何創建 DataFrmae
# 使用字典創建
import pandas as pd
import numpy as np
dict1 ?= {"xiaoming":[1,2,3],"xiaohong":[3,2,1]}
df1 = pd.DataFrame(dict1)# 使用array創建
data1 = np.arange(18).reshape(3,6)
df2 = pd.DataFrame(data1)

看了很多文章,在介紹什么是DataFrame時候會介紹如何探尋DataFrame中是數據,我認為可以放在數據處理和分析的時候介紹。

四 數據處理

4.1 數據的獲取

因業務的不同,數據來源不同,因此獲取數據的方式也不一樣,數據來源:數據庫,excel(xlwx,hmlx,csv),txt等格式

4.11 從數據庫獲取數據
import pyodbc
from contextlib import contextmanager
from concurrent.futures import ThreadPoolExecutor
import pandas as pd 
server = '替換成你的數據庫所在的服務器名稱'
database = '數據庫名稱'
username = '用戶名'
password = '登陸密碼'
driver = '{ODBC Driver 17 for SQL Server}'
# 不同版本的ODBC驅動
#driver = '{ODBC Driver 17 for SQL Server}'  # 最新版本
#driver = '{ODBC Driver 13 for SQL Server}'  # 較舊版本
#driver = '{SQL Server}'                     # 系統自帶的基礎驅動
#driver = '{SQL Server Native Client 11.0}' # Native Client驅動
# 創建連接字符串
conn_str = f'DRIVER={driver};SERVER={server};DATABASE={database};UID={username};PWD={password}'# 創建連接池
pool = ThreadPoolExecutor(max_workers=5)@contextmanager
def get_connection():conn = pyodbc.connect(conn_str)try:yield connfinally:conn.close()def execute_query(query, params=None):with get_connection() as conn:cursor = conn.cursor()if params:cursor.execute(query, params)else:cursor.execute(query)return cursor.fetchall()
def query_to_dataframe(query, params=None):with get_connection() as conn:try:if params:df = pd.read_sql(query, conn, params=params)else:df = pd.read_sql(query, conn)return dfexcept (pyodbc.Error, pd.io.sql.DatabaseError) as e:print(f"Error executing query: {e}")return None
## 場景1:需要原始數據進行簡單處理
raw_data = execute_query("SELECT count(*) FROM users")
user_count = raw_data[0][0]# 場景2:需要進行數據分析
df = query_to_dataframe("SELECT * FROM sales_data WHERE year = 2023")
monthly_sales = df.groupby('month').sum()# 場景3:需要自定義數據庫操作
with get_connection() as conn:cursor = conn.cursor()cursor.execute("INSERT INTO logs VALUES (?, ?)", [timestamp, message])conn.commit()
# 場景4:從數據庫獲取數據并轉換成 DataFrame格式
query = "select * from 表名稱"
project = pd.read_sql(query, pyodbc.connect(conn_str))

如果你不知道怎么書寫,請跟AI交流一下,讓它幫你出一個注意

4.12 從excel(xlsx和csv)獲取數據

注意:如果是公司Teams上的文件夾中的數據,如果想直接使用pandas讀取,需要將Teams上的表格同步到自己的ONEDrive中,然后獲取本地電腦中的文件位置,進行讀取。會產生同步問題。

  • 相對路徑和絕對路徑

假設當前目錄是 C:\Users\張三\project

相對路徑示例
"data.xlsx" ? ? ? ? ? ? ?#當前目錄下的文件
"./data.xlsx" ? ? ? ? ? ?#同上,./表示當前目錄
"../documents/file.xlsx" #上級目錄下的documents文件夾中的文件
"subfolder/image.png" ? #當前目錄下subfolder中的文件
"../../backup/data.sql" #上級的上級目錄下backup文件夾中的文件

絕對路徑:從文件系統根目錄開始的完整路徑

  • /和\
特性/?(正斜杠)\?(反斜杠)
原生系統Unix/Linux/macOSWindows
Python兼容性所有系統都支持 ?僅Windows原生,但Python可處理
URL使用標準格式 ?不適用 ?
轉義問題無問題 ?需要轉義?\\?或使用?r""
跨平臺性優秀 ?較差 ??
推薦度高度推薦 ?特定場景使用

?因此路徑有三種書寫方式

/

"./data.xlsx"

\\".\\data.xlsx"
\r".\data.xlsx"
  • 函數 read_excel
df = pd.read_excel(
'data.xlsx',           # 文件路徑
sheet_name=0,             # 可以是sheet的名稱也可以是數字(0,1,2,3,,,,,)
header=0,                 # 標題行位置
index_col=None,           # 索引列
usecols=None,             # 指定讀取的列
dtype=None,               # 數據類型
engine=None,              # 讀取引擎
skiprows=None,            # 跳過的行數
nrows=None                # 讀取的行數
)
  • 函數 read_csv
df = pd.read_csv('data.csv',                       # 文件路徑或URLsep=',',                          # 分隔符delimiter=None,                   # 分隔符的別名header='infer',                   # 標題行位置names=None,                       # 列名列表index_col=None,                   # 索引列usecols=None,                     # 指定讀取的列dtype=None,                       # 數據類型encoding=None,                    # 文件編碼nrows=None,                       # 讀取的行數skiprows=None                     # 跳過的行數
)

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

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

相關文章

算法題(力扣每日一題)—改變一個整數能得到的最大差值

給你一個整數 num 。你可以對它進行以下步驟共計 兩次&#xff1a; 選擇一個數字 x (0 < x < 9). 選擇另一個數字 y (0 < y < 9) 。 數字 y 可以等于 x 。 將 num中所有出現 x 的數位都用 y 替換。 令兩次對 num 的操作得到的結果分別為 a 和 b 。 請你返回 a 和 b…

Kubernetes筆記

1.簡介 Kubernetes的本質是一組服務器集群&#xff0c;它可以在集群的每個節點上運行特定的程序&#xff0c;來對節點中的容器進行管理。目的是實現資源管理的自動化&#xff0c;主要提供了如下的主要功能&#xff1a; 自我修復&#xff1a;一旦某一個容器崩潰&#xff0c;能夠…

Flutter——數據庫Drift開發詳細教程(八)

目錄 自定義 SQL 類型定義類型使用自定義類型在 Dart 中在 SQL 中 方言意識支持的 SQLite 擴展json1fts5地緣壟斷 自定義 SQL 類型 Drift 的核心庫主要以 SQLite3 為目標平臺編寫。這體現在Drift 開箱即用的SQL 類型上——這些類型由 SQLite3 支持&#xff0c;并新增了一些由 …

安卓遠控工具 CRaxsRat v7.6 安裝與使用教程(僅供合法測試學習)

在當今的信息安全領域&#xff0c;移動設備已成為重點關注對象。本文將介紹一款用于遠程管理與教學研究的工具 —— CRaxsRat v7.6&#xff0c;并詳細講解其安裝與使用流程。本教程僅供網絡安全愛好者在合法授權環境下學習使用&#xff0c;嚴禁任何非法用途。 &#x1f50d; 一…

容器的本質是進程

前言 Linux 容器的本質&#xff0c;是一個被隔離和限制的進程。 與虛擬機不同&#xff0c;容器無需虛擬化一個完整的操作系統&#xff0c;所以它比虛擬機更輕量級&#xff0c;效率也更高。 Linux 容器通過 namespaces 技術來隔離容器的視圖&#xff0c;使得容器進程只能看到…

LeetCode 第75題:顏色分類

給定一個包含紅色、白色和藍色、共n個元素的數組nums&#xff0c;原地對它們進行排序&#xff0c;使得相同顏色的元素相鄰&#xff0c;并按照紅色、白色、藍色順序排序。 使用整數0、1和2分布表示紅色、白色和藍色。 必須在不使用庫內置sort函數的情況下解決這個問題。 示例1&a…

PHP基礎-函數

函數是一段可重復使用的代碼塊&#xff0c;可以將一系列操作封裝起來&#xff0c;使代碼更加模塊化、可維護和可重用&#xff0c;來大大節省我們的開發時間和代碼量&#xff0c;提高編程效率。在PHP中你可以使用&#xff1a; 內置函數&#xff08;如 strlen()、array_merge()&a…

【FastAPI高級實戰】結合查詢參數與SQLModel Joins實現高效多表查詢(分頁、過濾、計數)

想象一下&#xff0c;你正在開發一個超酷的Web應用&#xff0c;比如一個博客平臺或者一個在線商店。你的API不僅要能把數據&#xff08;比如文章列表、商品信息&#xff09;展示給用戶&#xff0c;更要聰明到能理解用戶的各種“小心思”&#xff1a;用戶可能想看最新的文章、搜…

華為OD-2024年E卷-通過軟盤拷貝文件[200分] -- python

問題描述&#xff1a; 有一名科學家想要從一臺古董電腦中拷貝文件到自己的電腦中加以研究。但此電腦除了有一個3.5寸軟盤驅動器以外&#xff0c;沒有任何手段可以將文件持貝出來&#xff0c;而且只有一張軟盤可以使用。因此這一張軟盤是唯一可以用來拷貝文件的載體。科學家想要…

Keepalived 高可用,nginx + keepalived , lvs + keepalived、 數據庫+keepalived

keepalived 官網 Keepalived 可以用來防止服務器單點故障的發生 # 原理 是基于VRRP協議實現的&#xff0c;當backup收不到vrrp包時&#xff0c;就認為master宕機了&#xff0c;這時就需要根據VRRP的優先級來選舉一個backup 當master&#xff0c;就實現服務的HA&#xff08;高…

開疆智能Devicenet轉ModbusTCP網關連接臺達從站通訊模塊配置案例

本案例是通過開疆智能Devicenet轉ModbusTCP網關連接臺達Devicenet從站通訊模塊DVPDT02-H2的配置案例&#xff0c;網關作為ModbusTCP服務器和Devicenet主站&#xff0c;連接臺達Devicenet從站&#xff0c; 配置過程&#xff1a; 首先配置Devicenet從站&#xff0c;先設置從站De…

網絡NAT是什么

網絡NAT&#xff08;Network Address Translation&#xff0c;網絡地址轉換&#xff09;是一種用于計算機網絡中的技術&#xff0c;主要目的是在私有網絡與公有網絡&#xff08;比如互聯網&#xff09;之間轉換IP地址&#xff0c;實現私有網絡中的多臺設備通過一個公網IP訪問外…

React狀態管理——react-redux

目錄 一、redux介紹 二、安裝 三、基本實現步驟 3.1 創建Action Types 3.2 創建counterAction 3.3 創建counterReducer 3.4 結合所有Reducer 3.5 創建store 3.6 入口文件中提供store 3.7 在組件中的使用 3.8 使用thunk實現異步支持 3.8.1 安裝 3.8.2 在counterAct…

Java 零工市場小程序 | 靈活就業平臺 | 智能匹配 | 日結薪系統 | 用工一站式解決方案

在就業形勢如此嚴峻的情況下&#xff0c;很多小伙伴都會選擇零工的工作方式來賺取外快&#xff0c;很多用人單位也會因為職為短暫空缺或是暫時人手不夠而選擇招用兼職人員。 而Java 作為企業級開發的主流語言&#xff0c;以其卓越的性能和穩定性著稱。把零工的需求&#xff08…

數據可視化——一圖勝千言

第04篇&#xff1a;數據可視化——一圖勝千言 寫在前面&#xff1a;大家好&#xff0c;我是藍皮怪&#xff01;前面幾篇我們聊了統計學的基本概念、數據類型和描述性統計&#xff0c;這一篇我們要聊聊數據分析中最直觀、最有趣的部分——數據可視化。你有沒有發現&#xff0c;很…

1.1 Linux 編譯FFmpeg 4.4.1

一、安裝編譯工具 sudo apt install -y autoconf automake build-essential cmake git pkg-config nasm yasm libtool zlib1g-dev說明&#xff1a; autoconf&#xff1a;生成 configure 腳本&#xff0c;用于自動配置源碼。automake&#xff1a;與 autoconf 配合&#xff0c;…

【圖片識別改名】如何批量識別大量圖片的文字并重命名圖片,基于WPF和京東OCR識別接口的實現方案

應用場景 在企業文檔管理、數字圖書館、電商商品管理等場景中&#xff0c;經常需要處理大量圖片中的文字信息。例如&#xff1a; 電商平臺需要將商品圖片中的型號、規格等信息提取出來作為文件名圖書館需要將掃描的圖書頁面識別為文字并整理歸檔企業需要將紙質文檔電子化并按…

簡歷模板2——數據挖掘工程師5年經驗

姓名 / Your Name 數據挖掘工程師 | 5年經驗 | 推薦/風控/圖模型 &#x1f4de; 138-XXXX-XXXX | ?? your.emailexample.com | &#x1f310; github.com/yourname | &#x1f4cd; 北京 &#x1f3af; 個人簡介 / Summary 5年大廠數據挖掘經驗&#xff0c;碩士學歷。擅長推…

CSS3 漸變效果

1. 引言 CSS3 漸變能夠在指定顏色之間創建平滑過渡效果。這種設計元素不僅能為網頁增添豐富的視覺層次&#xff0c;更是現代網頁設計的重要組成部分。CSS3 提供兩種主要的漸變類型&#xff1a;線性漸變(Linear Gradient) - 沿直線方向進行顏色過渡&#xff1b;徑向漸變(Radial…

A Survey on 3D Gaussian Splatting——3D高斯領域綜述

原文鏈接&#xff1a;[2401.03890] A Survey on 3D Gaussian Splatting 動態更新的GitHub倉庫&#xff08;包含性能對比與最新文獻追蹤&#xff09;&#xff1a; https://github.com/guikunchen/3DGS-Benchmarks https://github.com/guikunchen/Awesome3DGS 摘要&#xff1…