【Python從入門到進階】59、Pandas庫中Series對象的操作(二)

接上篇《58、Pandas庫中Series對象的操作(一)》
上一篇我們講解了Pandas庫中Series對象的基本概念、對象創建和操作,本篇我們來繼續學習Series對象的運算、函數應用、時間序列操作,以及Series的案例實踐。

一、Series對象的運算

1. 數值型數據的算術運算

Pandas的Series對象支持基本的算術運算,包括加法、減法、乘法和除法。這些運算可以在Series對象之間進行,也可以與標量(即單一數值)進行。在進行算術運算時,Pandas會嘗試進行元素級別的對齊(element-wise alignment),如果Series對象的索引不同,Pandas會嘗試基于索引進行匹配,或者在某些情況下使用NaN(Not a Number)來填充缺失的位置。
加法:通過+運算符或add()方法實現。
減法:通過-運算符或sub()方法實現。
乘法:通過*運算符或mul()方法實現。
除法:通過/運算符或div()方法實現。
代碼示例:

import pandas as pd# 創建Series對象
s1 = pd.Series([1, 2, 3, 4])
s2 = pd.Series([10, 20, 30, 40])# 加法
s_add = s1 + s2
print("加法:", s_add)# 減法
s_sub = s1 - s2
print("減法:", s_sub)# 乘法
s_mul = s1 * s2
print("乘法:", s_mul)# 除法
s_div = s1 / s2
print("除法:", s_div)

2. 布爾索引與數據篩選

Pandas的Series對象支持基于布爾索引(Boolean Indexing)的數據篩選。布爾索引允許你根據條件表達式的結果來選取Series中的元素。當條件表達式作用于Series對象時,會返回一個與原始Series具有相同索引的布爾型Series,其中True表示滿足條件的元素,False表示不滿足條件的元素。然后,你可以使用這個布爾型Series來索引原始Series,從而選取滿足條件的元素。
條件表達式:使用比較運算符(如==、<、>等)創建條件表達式。
布爾索引:將條件表達式的結果用作索引,選取滿足條件的元素。
代碼示例:

import pandas as pd# 創建Series對象
s = pd.Series(['apple','banana','cherry','date'])# 布爾索引選以'a'開頭的元素
filtered_s = s[s.str.startswith('a')]
print("篩選結果:", filtered_s)

3. 排序操作

Pandas的Series對象提供了兩種排序方法:sort_values()和sort_index()。
sort_values():根據Series中的值進行排序。默認情況下,數據按升序排序,但也可以指定ascending=False進行降序排序。
sort_index():根據Series的索引進行排序。同樣地,也可以指定ascending參數來控制排序順序。
這兩種方法都會返回一個新的已排序的Series對象,原始Series對象保持不變。
代碼示例:

import pandas as pd# 創建帶有索引的Series對象
s = pd.Series([3, 1, 4, 1, 5], index=['d', 'b', 'a', 'c', 'e'])# 根據值排序
s_sorted_values = s.sort_values()
print("按值排序:", s_sorted_values)# 根據索引排序
s_sorted_index = s.sort_index()
print("按索引排序:", s_sorted_index)

4. 統計信息

Pandas的Series對象提供了許多統計方法,用于計算數據的描述性統計量。這些統計方法包括:
mean():計算Series中元素的均值(平均值)。
std():計算Series中元素的標準差。
max():返回Series中的最大值。
min():返回Series中的最小值。
此外,還有其他一些常用的統計方法,如median()(中位數)、mode()(眾數)、quantile()(分位數)等。這些方法可以幫助你快速了解數據的分布情況和特征。
代碼示例:

import pandas as pd ?# 創建Series對象 ?
s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9]) ?# 計算統計信息 ?
mean_value = s.mean() ?
std_value = s.std() ?
max_value = s.max() ?
min_value = s.min() ?print("均值:", mean_value) ?
print("標準差:", std_value) ?
print("最大值:", max_value) ?
print("最小值:", min_value)

二、Series對象的函數應用

1. 使用apply()方法應用自定義函數

apply()方法是Pandas中Series對象的一個強大工具,它允許用戶應用自定義函數到Series中的每個元素。通過apply()方法,用戶可以輕松地執行復雜的元素級操作,這些操作可能無法通過內置的Pandas函數直接實現。

示例:定義一個函數,該函數將Series中的每個元素平方,并使用apply()方法將其應用到Series對象上。

import pandas as pd ?# 自定義函數,計算平方 ?
def square(x): ?return x ** 2 ?# 創建Series對象 ?
s = pd.Series([1, 2, 3, 4, 5]) ?# 使用apply()方法應用自定義函數 ?
s_squared = s.apply(square) ?
print(s_squared)

2. 使用map()方法應用字典映射

map()方法允許用戶將一個字典中的鍵-值對映射到Series中的元素。當Series中的元素是字典的鍵時,這些元素將被替換為對應的值。這對于數據轉換和分類特別有用。

示例:創建一個字典,將一組數字映射到它們的字符串表示形式,并使用map()方法將其應用到Series對象上。

import pandas as pd ?# 創建字典映射 ?
mapping = {1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'} ?# 創建Series對象 ?
s = pd.Series([1, 2, 3, 4, 5]) ?# 使用map()方法應用字典映射 ?
s_mapped = s.map(mapping) ?
print(s_mapped)

3. 使用str屬性進行字符串操作

對于包含字符串的Series對象,Pandas提供了str屬性,該屬性包含了一系列用于字符串操作的方法。這些方法與Python內置的字符串方法類似,但可以在整個Series對象上高效地應用。

示例:使用str.upper()方法將Series中的字符串轉換為大寫,并使用str.contains()方法檢查字符串是否包含特定的子字符串。

import pandas as pd ?# 創建包含字符串的Series對象 ?
s = pd.Series(['apple', 'banana', 'cherry', 'Date', 'apple pie']) ?# 使用str.upper()方法轉換為大寫 ?
s_upper = s.str.upper() ?
print(s_upper) ?# 使用str.contains()方法檢查是否包含'apple' ?
contains_apple = s.str.contains('apple') ?
print(contains_apple)

4.pct_change()函數

pct_change()函數是Pandas庫中Series和DataFrame對象的一個方法,用于計算當前元素與前一元素之間的百分比變化。它對于時間序列數據特別有用,因為它可以幫助你快速了解數據是如何隨時間變化的。

具體來說,pct_change()方法計算的是當前元素與前一個元素之間的差異,然后將其除以前一個元素(得到的結果是一個比率),再乘以100(將結果轉換為百分比)。第一個元素的百分比變化通常是NaN(不是數字),因為沒有前一個元素可以與之比較。下面是一個簡單的例子來說明pct_change()是如何工作的:

import pandas as pd ?# 創建一個簡單的 Series ?
s = pd.Series([100, 105, 102, 110, 108]) ?# 計算百分比變化 ?
change = s.pct_change() ?print(change)

輸出是這樣的:

0 ? ? ? ? NaN ?
1 ? ?0.050000 ?
2 ? -0.028571 ?
3 ? ?0.078431 ?
4 ? -0.018182 ?
dtype: float64

解釋:
第一個元素的百分比變化是 NaN,因為沒有前一個元素可以與之比較。
第二個元素的百分比變化是 (105 - 100) / 100 * 100 = 5%。
第三個元素的百分比變化是 (102 - 105) / 105 * 100 = -2.8571%。
以此類推...
默認情況下,pct_change() 會計算與前一個元素的百分比變化,但你也可以通過傳遞一個整數參數來計算與前面多個元素的百分比變化。例如,s.pct_change(2)會計算當前元素與兩個前面的元素的百分比變化。

三、Series對象的時間序列操作

1. 轉換為日期時間格式

Pandas 提供了一個非常方便的函數 to_datetime(),可以將 Series 對象中的字符串或其他格式的數據轉換為日期時間格式。這在進行時間序列分析時非常重要。

示例:將一個包含日期字符串的 Series 轉換為日期時間格式。

import pandas as pd ?# 創建一個包含日期字符串的 Series ?
dates_str = pd.Series(['2023-01-01', '2023-01-02', '2023-01-03']) ?# 使用 to_datetime() 轉換為日期時間格式 ?
dates_dt = pd.to_datetime(dates_str) ?
print(dates_dt)

2. 時間序列的日期組件提取

對于日期時間格式的 Series,Pandas 提供了 .dt 訪問器,它允許你提取日期時間對象的各個組件,如年、月、日、小時等。

示例:從日期時間格式的 Series 中提取年份和月份。

# 假設 dates_dt 已經是日期時間格式的 Series ?# 提取年份 ?
years = dates_dt.dt.year ?
print(years) ?# 提取月份 ?
months = dates_dt.dt.month ?
print(months)

3. 時間序列的位移

shift() 方法允許你沿著索引軸(通常是時間軸)移動數據。這對于時間序列分析中的滯后或領先分析非常有用。示例:將時間序列數據向前移動一個單位(例如,一天)。

# 假設 dates_dt 及其對應的值 series 是我們的時間序列數據
values = pd.Series([56, 44, 79], index=dates_dt)# 值向前移動一個單位(日期)
shifted_values = values.shift(1)
print(shifted_values)# 計算數據的變動情況(當前數據 - 前一天數據)
value_changes = values - shifted_values# 打印數據變動情況
print("數據變動情況:")
print(value_changes)

注意:位移后的第一個值將會是 NaN,因為沒有前一天的數據可供參考。

4. 時間序列的重采樣

resample() 方法允許你根據指定的頻率重新采樣時間序列數據。這對于將高頻數據轉換為低頻數據(如每日數據轉換為每月數據)或將低頻數據轉換為高頻數據(通過插值或填充)非常有用。示例:將每日數據重采樣為每月數據,并計算每月的平均值。

# 假設 values 是每日數據的時間序列# 重采樣為每月數據,并計算平均值
monthly_mean = values.resample('ME').mean()
# 這里應該是前面56, 44, 79這一月份書所有數據的平均值
# (56+44+79)/3 = 59.666667
print(monthly_mean)

在這個例子中,'M' 表示月份,'MS' 通常用來表示月份的開始,'MD' 通常用來表示月份的結束。Pandas 支持多種頻率代碼,如 'D'(天)、'H'(小時)等。重采樣后,你會得到一個具有新頻率的時間序列數據。

四、Series案例實踐:股票數據分析

在本案例實踐中,我們將展示如何使用Pandas的Series對象對股票數據進行分析和處理。我們將分析一個假設的股票數據集,該數據集包含了某只股票在一段時間內的每日收盤價。

1. 數據準備

假設我們已經有了一個簡單的字典,它包含了某只股票幾天的收盤價。

import pandas as pd ?# 假設的收盤價數據 ?
stock_data = { ?'2023-01-01': 100, ?'2023-01-02': 102, ?'2023-01-03': 101, ?'2023-01-04': 103, ?'2023-01-05': 105 ?
} ?# 將字典轉換為Pandas Series對象,并設置日期為索引 ?
stock_prices = pd.Series(stock_data) ?
stock_prices.index = pd.to_datetime(stock_prices.index)

2. 數據可視化

使用Matplotlib庫來繪制收盤價的時間序列圖。

import matplotlib.pyplot as plt ?# 繪制收盤價的時間序列圖 ?
# 調用matplotlib.pyplot模塊的figure函數創建一個新的圖形窗口,并設置其大小 ?
plt.figure(figsize=(10, 5)) ?# 調用Series對象的plot方法繪制時間序列圖 ?
# 這里的title參數設置了圖形的標題 ?
stock_prices.plot(title='Stock Price Over Time', grid=True) ?# 設置x軸的標簽,即日期 ?
plt.xlabel('Date') ?# 設置y軸的標簽,即收盤價 ?
plt.ylabel('Close Price') ?# 調用plt.show()函數顯示圖形 ?
plt.show()

這段代碼的主要目的是使用matplotlib庫來繪制一個表示股票收盤價的時間序列圖。通過plt.figure()創建一個新的圖形窗口,并設置其大小。然后,通過stock_prices.plot()調用Series對象的plot方法,繪制出時間序列圖,并設置圖形的標題為“Stock Price Over Time”。接著,使用plt.xlabel()和plt.ylabel()分別設置x軸和y軸的標簽。最后,調用plt.show()來顯示圖形。

3. 數據分析

計算每日的收益率(即相對于前一日的百分比變化)。

# 計算每日收益率 ?
returns = stock_prices.pct_change() ?# 顯示前幾日的收益率 ?
print("Daily Returns:") ?
print(returns.head())

效果:

4. 結論

通過上面的代碼,我們展示了如何使用Pandas Series對象來表示和分析簡單的股票數據。我們首先創建了一個包含收盤價的Series對象,并使用Matplotlib繪制了時間序列圖。接著,我們計算了每日的收益率,并打印了前幾日的收益率。這個案例簡潔明了,展示了Series對象在數據分析中的基本用法。

至此,我們完成了Series對象的所有講解。下一篇我們來講解Pandas庫中DataFrame對象的操作。

轉載請注明出處:https://guangzai.blog.csdn.net/article/details/140084333

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

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

相關文章

1、音視頻解封裝流程---解復用

對于一個視頻文件(mp4格式/flv格式)&#xff0c;audio_pkt或者video_pkt是其最基本的數據單元&#xff0c;即視頻文件是由獨立的視頻編碼包或者音頻編碼包組成的。 解復用就是從視頻文件中把視頻包/音頻包單獨讀取出來保存成獨立文件&#xff0c;那么如何得知packet是視頻包還是…

指針賦值與引用傳遞:C語言的基礎知識與實踐技巧

指針賦值與引用傳遞&#xff1a;C語言的基礎知識與實踐技巧 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; **1. **引言 在C語言中&#xff0c;指針是一種強…

Vue CLI VS Vite

Vue CLI與Vite區別&#xff1a; Vue CLI與Vite之間存在明顯的區別&#xff0c;這些區別主要體現在實現原理、優化策略、開發環境速度、構建速度、依賴關系分析和插件系統等方面。以下是關于Vue CLI和Vite區別的詳細分析&#xff1a; 實現原理&#xff1a; Vue CLI&#xff1a…

【Spring Boot】Spring Boot簡介

1、概述 Spring Boot是一個用于創建獨立、生產級別的基于Spring的應用程序的開發框架。旨在簡化Spring應用的初始搭建和開發過程。它通過自動配置和大量默認配置&#xff0c;使得開發者能夠快速搭建一個獨立的Spring應用&#xff0c;無需進行大量的手動配置。 2、主要特點 快…

【一篇搞懂】操作系統期末大題:進程同步與互斥 PV操作

文章目錄 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;??????題型一&#xff1a;利用信號量實現前驅關系題型二&#xff1a;利用信號量實現資源同步與互斥 一、前言&#x1f680;&#x1f680;&#x1f680; 本文簡介&#xff1a;這是一篇基于b…

無人機遠程控制:北斗短報文技術詳解

無人機&#xff08;UAV&#xff09;技術的快速發展和應用&#xff0c;使得遠程控制成為了一項關鍵技術。無人機遠程控制涉及無線通信、數據處理等多個方面&#xff0c;其中北斗短報文技術以其獨特的優勢&#xff0c;在無人機遠程控制領域發揮著重要作用。本文將詳細解析無人機遠…

2024-06-26 base SAS programming 學習筆記6(proc report)

proc report可以生成報表&#xff0c;基本格式&#xff1a; proc report data options; (options 可以是windows/WD表示將結果輸出至單獨的報表窗口&#xff0c;或者nowindows/nowd將結果輸出至HTML結果窗口) column variables ;(篩選待輸出的變量&#xff0c;變量名與變量名之…

09_計算機網絡模型

目錄 OSI/RM七層模型 OSI/RM七層模型 各層介紹及硬件設備 傳輸介質 TCP/IP協議簇 網絡層協議 傳輸層協議 應用層協議 完整URL的組成 IP地址表示與計算 分類地址格式 子網劃分和超網聚合 無分類編址 特殊含義的IP地址 IPv6協議 過渡技術 OSI/RM七層模型 OSI/RM七…

區間動態規劃——最長回文子序列長度(C++)

把夜熬成粥&#xff0c;然后喝了它。 ——2024年7月1日 書接上回&#xff1a;區間動態規劃——最長回文子串&#xff08;C&#xff09;-CSDN博客&#xff0c;大家有想到解決辦法嗎&#xff1f; 題目描述 給定一個字符串s&#xff08;s僅由數字和英文大小寫字母組成&#xff0…

微積分-導數3(微分法則)

常見函數的導數 常量函數的導數 d d x ( c ) 0 \frac{d}{dx}(c) 0 dxd?(c)0 常量函數的圖像是一條水平線 y c y c yc&#xff0c;它的斜率為0&#xff0c;所以我們必須有 f ′ ( x ) 0 f(x) 0 f′(x)0。從導數的定義來看&#xff0c;證明也很簡單&#xff1a; f ′ …

在node.js環境中使用web服務器http-server運行html靜態文件

http-server http-server是一個超輕量級web服務器&#xff0c;它可以將任何一個文件夾當作服務器的目錄供自己使用。 當我們想要在服務器運行一些代碼&#xff0c;但是又不會配置服務器的時候&#xff0c;就可以使用http-server就可以搞定了。 使用方法 因為http-server需要…

Linux Vim 進階教程

Linux Vim 進階教程 1. 簡介 Vim&#xff08;Vi IMproved&#xff09;是一款功能強大的文本編輯器&#xff0c;廣泛應用于Linux和Unix系統中。本教程將深入探討Vim的高級功能和技巧&#xff0c;幫助您提升編輯效率和使用體驗。 2. Vim 配置和插件管理 2.1 配置文件 .vimrc …

QT拖放事件之三:自定義拖放操作-利用QDrag來拖動完成數據的傳輸

1、運行效果 1)Qt::MoveAction 2)Qt::CopyAction 2、源碼 #include "Widget.h" #include "ui_Widget.h" #include "common.h"

二級建造師(建筑工程專業)考試題庫,高效備考!!!

16.在施工合同履行期間發生的變更事項中&#xff0c;屬于工程變更的是&#xff08;&#xff09;。 A.質量要求變更 B.分包單位變更 C.合同價款變更 D.相關法規變更 答案&#xff1a;A 解析&#xff1a;工程變更一般是指在工程施工過程中&#xff0c;根據合同約定對施工的…

練習 String翻轉 注冊處理 字符串統計

p493 將字符串中指定部分進行翻轉 package chapter;public class reverse {public static void main(String[] args) {String str "abcdef";str reverseMethod(str,0,3);System.out.println(str);}public static String reverseMethod(String str, int start, in…

恭賀甘露海首屆道教南宗養生論壇暨天臺山第十屆道醫大會圓滿成功

6月13日&#xff0c;首屆中國道教南宗養生論壇暨天臺山第十屆道醫學術交流大會在浙江新昌重陽宮千人會場隆重開幕。 本次大會主辦單位&#xff1a;天臺山桐柏宮 中國民間中醫醫藥研究開發協會道醫學分會&#xff0c; 承辦單位&#xff1a;新昌縣重陽宮 &#xff0c;協辦單位&…

網絡基礎:靜態路由

靜態路由是一種由網絡管理員手動配置的路由方式&#xff0c;用于在網絡設備&#xff08;如路由器或交換機&#xff09;之間傳遞數據包。與動態路由不同&#xff0c;靜態路由不會根據網絡狀態的變化自動調整。 不同廠商的網絡設備在靜態路由的配置上有些許差異&#xff1b;下面…

什么是以太坊合約ABI(Application Binary Interface)

文章目錄 什么是以太坊合約ABI一、背景二、ABI&#xff08;Application Binary Interface&#xff09;三、怎么生成ABIsolc命令 四、abi內容FunctionEvent函數選擇器 五、參考 什么是以太坊合約ABI 一、背景 以太坊的智能合約程序&#xff0c;是在以太坊虛擬機&#xff08;Et…

網絡構建關鍵技術_2.IPv4與IPv6融合組網技術

互聯網數字分配機構&#xff08;IANA&#xff09;在2016年已向國際互聯網工程任務組&#xff08;IETF&#xff09;提出建議&#xff0c;要求新制定的國際互聯網標準只支持IPv6&#xff0c;不再兼容IPv4。目前&#xff0c;IPv6已經成為唯一公認的下一代互聯網商用解決方案&#…

安卓開發app-基礎的java項目構建補充知識

安卓開發app-基礎的java項目構建補充知識&#xff01;上一次分享了基礎的項目構建&#xff0c;但是還遺漏了一些基礎的內容。今天補充完整。 首先&#xff0c;是關于項目的一些配置文件的信息。 第一個配置文件&#xff1a;{setting.gradle} 國內阿里云倉庫地址信息&#xff1…