Python(Pandas)數據分析學習

1.Pandas基本構成

引入Pandas

import pandas as pd

1.Series 行

對應Excel中的一行數據,一維數據

定義Series

# 第一個參數是具體數據
# 第二個參數的對應的索引下標
# 第三個參數的行名稱
data = pd.Series([1,2,3,4,5], index=['a','b','c','d','e'], name='data')
print(data)
# 輸出Series對象的索引
print(data.index)
# 輸出Series對象里面索引為 'a'的值
print(data['a'])

執行結果:

2.DataFrame 表

對應Excel表,二維數據,類似于二維數組,由Series組成

定義DataFrame

# 定義DataFrame
# 先定義單獨的每一行
s1 = pd.Series([1, 2, 3, 4, 5], index=['a','b','c','d','e'], name='A')
s2 = pd.Series([10, 20, 30, 40, 50], index=['a','b','c','d','e'], name='B')
s3 = pd.Series([100, 200, 300, 400, 500], index=['a','b','c','d','e'], name='C')
df = pd.DataFrame([s1, s2, s3])
print(df)
# 字典方式定義
# 輸出結果與上方 行列顛倒
df2 = pd.DataFrame({s1.name: s1, s2.name: s2, s3.name: s3})
print(df2)

執行結果:

2.Pandas基本操作

1.讀取寫入數據?

1.讀取數據

import pandas as pd# 讀取
# pandas讀取時會自動跳過空行
# header參數可以指定跳過哪一行
# 讀取時會產生默認的索引
file_path = "test.xlsx"
data = pd.read_excel(file_path, header=2, sheet_name="Sheet1")
print(data)# index_col 指定索引列
# dtype 轉換指定列的數據類型
data1 = pd.read_excel(file_path, sheet_name="Sheet1", index_col='name', dtype={"age": int})
print(data1)

執行結果

2.寫入數據

# 寫入
df = pd.DataFrame({"id": [1, 2, 3, 4, 5],"name": ["張三", "李四", "王五", "劉大", "關二"],"age": [10, 20, 30, 40, 50]
})
# 自定義索引
df = df.set_index("id")
df.to_excel("test.xlsx")

如果寫入時to_excel方法報錯,則下載openpyxl解決

from openpyxl import Workbook

執行結果:

?2.對數據進行排序

import pandas as pd# 讀取文件
people = pd.read_excel('test.xlsx', index_col="id")
# by 根據哪一列進行排序
# inplace 是否用排序后的數據集替換原來的數據,默認為False,即不替換
# ascending 是否按照升序排序,默認升序,False為降序
# na_position 設定缺失值的顯示位置 first lase
people.sort_values(by="age", inplace=True, ascending=False, na_position="first")
print(people)# 根據多個列進行排序
peoples = pd.read_excel('test.xlsx', index_col="id")
peoples.sort_values(by=["age", "name"], ascending=[True, False], inplace=True)
print(peoples)

3.數據過濾

讀取列或行數據時,其索引必須存在,否則報錯

import pandas as pdpeople = pd.read_excel("test.xlsx", index_col="id")
# 判斷數據行中是否有缺省值
print(people.isnull().any)
# 刪除數據中的缺省值
people.dropna(inplace=True)
# 過濾數據中符合條件的數據
# [] 里面直接寫條件
result = people[(people["name"] == "張三") & (people["age"] >= 10)]
print(result)# 定義一個函數
def age_10_to_50(a):return 10 <= a <= 50def score_10_to_50(a):return 0 <= a <= 60# loc方法是讀取文件行列數據的方法,可以讀取指定行,列,區域的數據
result_10_to_50 = people[people["name"] == "張三"].loc[people["age"].apply(age_10_to_50)].loc[people["score"].apply(score_10_to_50)]
print(result_10_to_50)

4.Excel數據拆分

本質還是使用了字符串的split方法

import pandas as pdpeople = pd.read_excel("test.xlsx", index_col="id")# 將name拆分
df = people["name"].str.split(expand=True)
# 保存拆分出來的數據 保存前全部表中有這兩列
people["姓氏"] = df[0]
people["名字"] = df[1]
print(people)

5.多表聯合操作

import pandas as pdstudent = pd.read_excel("test.xlsx")
score = pd.read_excel("test1.xlsx")
age = pd.read_excel("test2.xlsx")# how 指定連接方式,默認inner 內連, left,right,outer 類似數據庫多表查詢
# on 用于連接的列名,必須同時存在與左右兩個DataFrame對象中
# left_on,right_on 左右測用于連接的列
# left_index,right_index 如果為True,則使用左右側的行索引作為其連接鍵
# sort 是否按照字典順序通過連接鍵對結果DataFrame排序
# suffixes 用于重疊列的字符串后綴元組
# copy 是否總是從傳遞的DataFrame對象復制數據,默認為True
# indicator 如果為True,則添加一個名為_merge的特殊列,顯示每列的合并信息
# fillna() 如果單元格為空,則填充指定數據
table = student.merge(score, how='left', on="id").fillna(0)
table["分數"] = table["分數"].astype(int)table2 = table.merge(age, how='left', on="id").fillna(0)
table2["年齡"] = table2["年齡"].astype(int)print(table2)

6.統計運算

import pandas as pddf = pd.DataFrame([[1, 2, 3], [2, 2, 3], [3, 3, 3]], columns=['A', 'B', 'C'])
print(df)# 求某一行平均數或列
# mean 計算平均值方法
# axis 0:按列計算 1:按行計算
# skipna:是否忽略缺失值,默認為True
print(df.mean(axis=1))
# drop 刪除指定標簽的行或列
# axis 0:刪除索引 1:刪除列
# inplace False:返回一個副本 True:在原地刪除并返回None
print(df.drop("A", axis=1))people = pd.read_excel("test1.xlsx")
columns_name = ["A", "B", "C"]
# 對行求平均值,總和
row_mean = people[columns_name].mean(axis=1)
row_sum = people[columns_name].sum(axis=1)
total = "總分"
average = "平均分"
people[total] = row_sum
people[average] = row_mean
columns_name += [total, average]
# 對列求平均值
col_mean = people[columns_name].mean()
# 給結果行中加個名字
col_mean["名稱"] = "Summary"
people = people._append(col_mean, ignore_index=True)
print(people)

7.數據可視化

設置字體部分很重要

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt# 設置顯示中文字體 黑體 重要
matplotlib.rcParams["font.sans-serif"] = ["SimHei"]
# 設置正常顯示符合
matplotlib.rcParams["axes.unicode_minus"] = False# 解決matplotlib版本與pandas沖突
matplotlib.use("TkAgg")
# matplotlib 常用繪圖工具students = pd.read_excel("test1.xlsx")
name = "名稱"
score = "分數"
age = "年齡"
students.sort_values(by=score, inplace=True, ascending=False)
# 繪制圖片
plt.bar(students[name], students[score], color="blue")
# 設置標題
plt.title("Student Score", fontsize=16)
# 設置X軸與Y軸的名稱
plt.xlabel("Name", fontsize=16)
plt.ylabel("Score", fontsize=16)
# 將指定的列的數據旋轉90度
plt.xticks(students[name], rotation=90, fontsize=16)
plt.tight_layout()
# 展示
plt.show()# 繪制折線圖  上方為柱狀圖
students.plot(y=[score, age])
plt.title("學生的分數")
plt.xticks(students.index)
plt.show()# 散點圖
students.plot.scatter(x=score, y=age)
plt.title("學生的分數年齡")
plt.ylabel("分數")
plt.xlabel("年齡")
plt.show()

輸出結果:

柱狀圖部分

折線圖部分

散點圖部分

8.讀寫word文檔

from docx import Document# 創建文件
document = Document()
document.save("new.docx")# 讀取文件
doc = Document("new.docx")
# 循環段落
for paragraph in doc.paragraphs:print(paragraph.text)# 將文字寫入到word文檔中
doc1 = Document()
# 添加標題
doc1.add_heading("一級標題", level=1)
# 添加段落
p2 = doc1.add_paragraph("第二個段落")
p1 = p2.insert_paragraph_before("第一個段落")
p3 = doc1.add_paragraph("新段落")
# 增加文字內容
p3.add_run("加粗").bold = True
p3.add_run("以及")
p3.add_run("斜體").italic = True
doc1.save("new1.docx")

輸出結果:

9.word寫入圖片

from docx import Document
from docx.shared import Inchesdoc = Document()
doc.add_picture("p.png", width=Inches(1.25))
doc.save("new2.docx")

10.word寫入表格

from docx import Document
from docx.shared import Inchesdoc = Document()
# 創建table 設置行列數量
table = doc.add_table(rows=3, cols=3)
# 設置table的樣式
table.style = "Table Grid"
# 獲取單元格
cell = table.cell(0, 1)
# 設置單元格文本
cell.text = "第一行第二列"
p = cell.paragraphs[0]
run = p.add_run()
run.add_picture("img.png", width=Inches(2))doc.save("new3.docx")

11.xlrd讀取excel表格數據

注意版本使用

import xlrd# xlrd新版本只支持讀取xls文件,讀取xlsx文件需要降為1.2.0版本
data = xlrd.open_workbook("test1.xlsx")
print(data)# 獲取第一個sheet頁 三種方法
sheet = data.sheets()[0]
sheet = data.sheet_by_index(0)
sheet = data.sheet_by_name("Sheet1")
print(sheet)

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

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

相關文章

我用Ai學Android Jetpack Compose之Card

這篇學習一下Card。回答來自 通義千問。 我想學習Card&#xff0c;麻煩你介紹一下 當然可以&#xff01;在 Jetpack Compose 中&#xff0c;Card 是一個非常常用的組件&#xff0c;用于創建帶有陰影和圓角的卡片式布局。它可以幫助你輕松實現美觀且一致的 UI 設計&#xff0c…

圖漾相機——C++語言屬性設置

文章目錄 前言1.SDK API功能介紹1.1 Device組件下的API測試1.1.1 相機工作模式設置&#xff08;TY_TRIGGER_PARAM_EX&#xff09;1.1.2 TY_INT_FRAME_PER_TRIGGER1.1.3 TY_INT_PACKET_DELAY1.1.4 TY_INT_PACKET_SIZE1.1.5 TY_BOOL_GVSP_RESEND1.1.6 TY_BOOL_TRIGGER_OUT_IO1.1.…

STM32 TIM定時器配置

TIM簡介 TIM&#xff08;Timer&#xff09;定時器 定時器可以對輸入的時鐘進行計數&#xff0c;并在計數值達到設定值時觸發中斷 16位計數器、預分頻器、自動重裝寄存器的時基單元&#xff0c;在72MHz計數時鐘下可以實現最大59.65s的定時 不僅具備基本的定時中斷功能&#xff…

pytorch實現基于Word2Vec的詞嵌入

PyTorch 實現 Word2Vec&#xff08;Skip-gram 模型&#xff09; 的完整代碼&#xff0c;使用 中文語料 進行訓練&#xff0c;包括數據預處理、模型定義、訓練和測試。 1. 主要特點 支持中文數據&#xff0c;基于 jieba 進行分詞 使用 Skip-gram 進行訓練&#xff0c;適用于小數…

【數據結構】_鏈表經典算法OJ(力扣/牛客第二彈)

目錄 1. 題目1&#xff1a;返回倒數第k個節點 1.1 題目鏈接及描述 1.2 解題思路 1.3 程序 2. 題目2&#xff1a;鏈表的回文結構 2.1 題目鏈接及描述 2.2 解題思路 2.3 程序 1. 題目1&#xff1a;返回倒數第k個節點 1.1 題目鏈接及描述 題目鏈接&#xff1a; 面試題 …

pytorch基于 Transformer 預訓練模型的方法實現詞嵌入(tiansz/bert-base-chinese)

以下是一個完整的詞嵌入&#xff08;Word Embedding&#xff09;示例代碼&#xff0c;使用 modelscope 下載 tiansz/bert-base-chinese 模型&#xff0c;并通過 transformers 加載模型&#xff0c;獲取中文句子的詞嵌入。 from modelscope.hub.snapshot_download import snaps…

爬蟲基礎之爬取某站視頻

目標網址:為了1/4螺口買小米SU7&#xff0c;開了一個月&#xff0c;它值嗎&#xff1f;_嗶哩嗶哩_bilibili 本案例所使用到的模塊 requests (發送HTTP請求)subprocess(執行系統命令)re (正則表達式操作)json (處理JSON數據) 需求分析: 視頻的名稱 F12 打開開發者工具 or 右擊…

DeepSeek R1本地化部署 Ollama + Chatbox 打造最強 AI 工具

&#x1f308; 個人主頁&#xff1a;Zfox_ &#x1f525; 系列專欄&#xff1a;Linux 目錄 一&#xff1a;&#x1f525; Ollama &#x1f98b; 下載 Ollama&#x1f98b; 選擇模型&#x1f98b; 運行模型&#x1f98b; 使用 && 測試 二&#xff1a;&#x1f525; Chat…

【linux網絡(5)】傳輸層協議詳解(下)

目錄 前言1. TCP的超時重傳機制2. TCP的流量控制機制3. TCP的滑動窗口機制4. TCP的擁塞控制機制5. TCP的延遲應答機制6. TCP的捎帶應答機制7. 總結以及思考 前言 強烈建議先看傳輸層協議詳解(上)后再看這篇文章. 上一篇文章講到TCP協議為了保證可靠性而做的一些策略, 這篇文章…

DeepSeek 遭 DDoS 攻擊背后:DDoS 攻擊的 “千層套路” 與安全防御 “金鐘罩”

當算力博弈升級為網絡戰爭&#xff1a;拆解DDoS攻擊背后的技術攻防戰——從DeepSeek遇襲看全球網絡安全新趨勢 在數字化浪潮席卷全球的當下&#xff0c;網絡已然成為人類社會運轉的關鍵基礎設施&#xff0c;深刻融入經濟、生活、政務等各個領域。從金融交易的實時清算&#xf…

二、CSS筆記

(一)css概述 1、定義 CSS是Cascading Style Sheets的簡稱,中文稱為層疊樣式表,用來控制網頁數據的表現,可以使網頁的表現與數據內容分離。 2、要點 怎么找到標簽怎么操作標簽對象(element) 3、css的四種引入方式 3.1 行內式 在標簽的style屬性中設定CSS樣式。這種方…

第三篇:模型壓縮與量化技術——DeepSeek如何在邊緣側突破“小而強”的算力困局

——從算法到芯片的全棧式優化實踐 隨著AI應用向移動終端與物聯網設備滲透&#xff0c;模型輕量化成為行業核心挑戰。DeepSeek通過自研的“算法-編譯-硬件”協同優化體系&#xff0c;在保持模型性能的前提下&#xff0c;實現參數量與能耗的指數級壓縮。本文從技術原理、工程實…

C++編程語言:抽象機制:泛型編程(Bjarne Stroustrup)

泛型編程(Generic Programming) 目錄 24.1 引言(Introduction) 24.2 算法和(通用性的)提升(Algorithms and Lifting) 24.3 概念(此指模板參數的插件)(Concepts) 24.3.1 發現插件集(Discovering a Concept) 24.3.2 概念與約束(Concepts and Constraints) 24.4 具體化…

DeepSeek-R1本地部署實踐

一、下載安裝 --Ollama Ollama是一個開源的 LLM&#xff08;大型語言模型&#xff09;服務工具&#xff0c;用于簡化在本地運行大語言模型&#xff0c;降低使用大語言模型的門檻&#xff0c;使得大模型的開發者、研究人員和愛好者能夠在本地環境快速實驗、管理和部署最新大語言…

AI技術路線(marked)

人工智能&#xff08;AI&#xff09;是一個非常廣泛且充滿潛力的領域&#xff0c;它涉及了讓計算機能夠執行通常需要人類智能的任務&#xff0c;比如感知、推理、學習、決策等。人工智能的應用已經滲透到各行各業&#xff0c;從自動駕駛到醫療診斷&#xff0c;再到推薦系統和自…

【leetcode詳解】T598 區間加法

598. 區間加法 II - 力扣&#xff08;LeetCode&#xff09; 思路分析 核心在于將問題轉化&#xff0c; 題目不是要求最大整數本身&#xff0c;而是要求解最大整數的個數 結合矩陣元素的增加原理&#xff0c;我們將抽象問題轉為可操作的方法&#xff0c;其實就是再找每組ops中…

【最后203篇系列】004 -Smarklink

說明 這個用來替代nginx。 最初是希望用nginx進行故障檢測和負載均衡&#xff0c;花了很多時間&#xff0c;大致的結論是&#xff1a;nginx可以實現&#xff0c;但是是在商業版里。非得要找替代肯定可以搞出來&#xff0c;但是太麻煩了&#xff08;即使是nginx本身的配置也很煩…

完全卸載mysql server步驟

1. 在控制面板中卸載mysql 2. 打開注冊表&#xff0c;運行regedit, 刪除mysql信息 HKEY_LOCAL_MACHINE-> SYSTEM->CurrentContolSet->Services->EventLog->Application->Mysql HKEY_LOCAL_MACHINE-> SYSTEM->CurrentContolSet->Services->Mysql …

1. 【.NET Aspire 從入門到實戰】--理論入門與環境搭建--引言

在當前軟件開發領域&#xff0c;云原生和微服務架構已經成為主流趨勢&#xff0c;傳統的單體應用正逐步向分布式系統轉型。隨著業務需求的不斷變化與用戶規模的迅速擴大&#xff0c;如何在保證高可用、高擴展性的同時&#xff0c;還能提高開發效率與降低維護成本&#xff0c;成…

Ubuntu 22.04系統安裝部署Kubernetes v1.29.13集群

Ubuntu 22.04系統安裝部署Kubernetes v1.29.13集群 簡介Kubernetes 的工作流程概述Kubernetes v1.29.13 版本Ubuntu 22.04 系統安裝部署 Kubernetes v1.29.13 集群 1 環境準備1.1 集群IP規劃1.2 初始化步驟&#xff08;各個節點都需執行&#xff09;1.2.1 主機名與IP地址解析1.…