dataframe數據形式操作中的diff和shift函數區別與對比

問題分析

從錯誤日志中可以看到,代碼在 report_services.pygnss_monthly_report 函數中出現了 ValueError,具體錯誤信息是:

ValueError: either both or neither of x and y should be given

這個錯誤發生在以下代碼行:

report_data["V(ΔXY)"] = np.where(report_data['ΔXY'].diff().fillna(0) / 1, 0)

問題出在 np.where 的使用上。np.where 的語法是:

np.where(condition, x, y)
  • condition:條件表達式。
  • x:當條件為 True 時的返回值。
  • y:當條件為 False 時的返回值。

在您的代碼中,np.where 只提供了一個參數(report_data['ΔXY'].diff().fillna(0) / 1),缺少了 xy 參數,因此拋出了 ValueError


解決方案

修復 np.where 的使用,確保提供完整的參數。以下是修改后的代碼:

# 修改前
report_data["V(ΔXY)"] = np.where(report_data['ΔXY'].diff().fillna(0) / 1, 0)# 修改后
report_data["V(ΔXY)"] = np.where(report_data['ΔXY'].diff().fillna(0) / 1 != 0,  # 條件report_data['ΔXY'].diff().fillna(0) / 1,       # 條件為 True 時的值0                                              # 條件為 False 時的值
)

shiftdiff 函數的區別

1. shift 函數
  • 功能:將數據沿著指定的軸移動指定的步長。

  • 參數

    • periods:移動的步長,默認為 1。正數表示向下移動,負數表示向上移動。
    • fill_value:用于填充移動后產生的缺失值。
  • 示例

    import pandas as pddata = pd.Series([1, 2, 3, 4, 5])
    shifted_data = data.shift(1)
    print(shifted_data)
    

    輸出:

    0    NaN
    1    1.0
    2    2.0
    3    3.0
    4    4.0
    dtype: float64
    
  • 應用場景

    • 計算滯后值(如上一行的值)。
    • 計算滑動窗口統計量(如滑動平均值)。

2. diff 函數
  • 功能:計算當前行與前一行的差值。

  • 參數

    • periods:差分的步長,默認為 1。正數表示與前面的行計算差值,負數表示與后面的行計算差值。
  • 示例

    import pandas as pddata = pd.Series([1, 2, 3, 4, 5])
    diff_data = data.diff()
    print(diff_data)
    

    輸出:

    0    NaN
    1    1.0
    2    1.0
    3    1.0
    4    1.0dtype: float64
    
  • 應用場景

    • 計算時間序列數據的變化量。
    • 計算數據的一階差分(如速度、加速度)。

shiftdiff 的區別

特性shiftdiff
功能移動數據,不改變數據本身的值計算當前行與前一行的差值
返回值移動后的數據,可能包含 NaN差值數據,第一行通常為 NaN
參數periods(步長)、fill_value(填充值)periods(步長)
應用場景滯后值計算、滑動窗口統計變化量計算、一階差分

修復后的完整代碼示例

以下是修復后的完整代碼片段:

# 計算 ΔXY 變化速率 (V(ΔXY))
delta_xy_diff = report_data['ΔXY'].diff().fillna(0)  # 計算 ΔXY 的變化量
delta_xy_shift = report_data['ΔXY'].shift(1).fillna(0)  # 獲取前一行的 ΔXY 值
report_data["V(ΔXY)"] = np.where(delta_xy_shift != 0,  # 條件:前一行的 ΔXY 不為 0delta_xy_diff / delta_xy_shift,  # 條件為 True 時的值:變化速率0  # 條件為 False 時的值:設置為 0
)# 計算 ΔXY 累計變化量 (∑(ΔXY))
report_data["∑(ΔXY)"] = report_data["ΔXY"].cumsum()# 將 NaN 替換為 0
report_data = report_data.fillna(0)# 將數據保留小數點后兩位
report_data = report_data.round(2)# 將 DataFrame 轉換為列表
data_list = report_data.values.tolist()# 將第一列(索引 0)設置為 0
for row in data_list:row[0] = 0  # 將每一行的第一列設置為 0# 將處理后的列表賦值給 sensor_report["data"]
sensor_report["data"] = data_listlogger.info(f"該臺 gnss 設備 {query_para.device_type + '.' + query_para.measurement_id} 的報表數值是: {sensor_report}")return sensor_report

總結

  1. 修復了 np.where 的錯誤:確保 np.where 的參數完整。
  2. 解釋了 shiftdiff 的區別
    • shift 用于移動數據。
    • diff 用于計算差值。
  3. 提供了修復后的完整代碼:確保代碼邏輯正確,并能正確處理數據。
    應用:

report_data[“V(ΔXY)”] = np.where(report_data[‘ΔXY’].diff() != 0, report_data[‘ΔXY’].diff().shift(1) / 1, 0)

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

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

相關文章

C語言動態內存管理(下)

歡迎拜訪:霧里看山-CSDN博客 本篇主題:C語言動態內存管理(下) 發布時間:2025.3.18 隸屬專欄:C語言 目錄 動態內存常見錯誤內存泄漏(Memory Leak)典型場景后果解決方案 懸掛指針(Dangling Pointe…

Vue:Vue2和Vue3創建項目的幾種常用方式以及區別

前言 Vue.js 和 Element UI 都是用 JavaScript 編寫的。 1、Vue.js 是一個漸進式 JavaScript 框架。2、Element UI 是基于 Vue.js 的組件庫。3、JavaScript 是這兩個項目的主要編程語言。 而Element Plus是基于TypeScript開發的。 一、Vue2 1、基于vuecli工具創建 vue2 …

機器人曲面跟蹤Surface-Tracking

定義 機器人曲面跟蹤(Surface-Tracking)是指機器人通過實時感知工件曲面的三維形貌,動態調整運動軌跡和位姿,以精確跟隨曲面進行加工(如打磨、拋光、噴涂等)的技術。 力 - 位姿協同控制 力控模式&#xff…

網絡安全運維應急響應與溯源分析實戰案例

在日常運維過程中,網絡安全事件時有發生,快速響應和精準溯源是保障業務穩定運行的關鍵。本文將通過一個實際案例,詳細解析從發現問題到溯源定位,再到最終解決的完整流程。 目錄 一、事件背景 二、事件發現 1. 監控告警觸發 2…

【AVRCP】藍牙協議棧深度解析:AVCTP互操作性核心機制與實現細節

目錄 一、事務標簽(Transaction Label)機制 1.1 事務標簽核心規則 1.2 事務標簽作用域與并發性 1.3 實現建議與陷阱規避 1.4 協議設計思考 1.5 調試與驗證 二、消息分片(Fragmentation)機制 2.1 分片觸發條件 2.2 分片支…

harmonyOS NEXT開發與前端開發深度對比分析

文章目錄 1. 技術體系概覽1.1 技術棧對比1.2 生態對比 2. 開發范式比較2.1 鴻蒙開發范式2.2 前端開發范式 3. 框架特性對比3.1 鴻蒙 Next 框架特性3.2 前端框架特性 4. 性能優化對比4.1 鴻蒙性能優化4.2 前端性能優化 5. 開發工具對比5.1 鴻蒙開發工具5.2 前端開發工具 6. 學習…

OpenWebUI:一站式 AI 應用構建平臺體驗

🚀 大家好,今天給大家分享一個超棒的 AI 應用構建工具——OpenWebUI!體驗下來,只能說絲滑!必須強烈推薦! 🔥 聽說過阿里巴巴的 Qwen 嗎?他們最新的 Qwen Chat 網站就是用 OpenWebUI…

多線程—進程與線程

1 進程 1.1 進程概念 進程:操作系統提供的一種抽象,當程序在運行時,好像計算機的所有硬件資源都在為其服務。換言之,進程就是程序的一次運行過程。進程是操作系統分配資源的基本單位。 注意:區分進程和程序&#xff0…

[原創](Modern C++)現代C++的關鍵性概念: 靈活多變的綁定: std::bind

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、C …

ssm框架之mybatis框架動態SQL

1 mybatis動態sql mybatis可以通過各種各樣的標簽在sql映射文件中實現如下功能 1、語句的動態拼接 2、前后綴格式處理 3、復雜參數處理 常用標簽如下: 1.1 if標簽 如下示例,當有一個入參為null或者空的時候的時候,不參與計算,…

Spring Boot 事務詳解

Spring Boot 事務詳解 引言 在現代應用程序中,事務管理是確保數據一致性和完整性的重要機制。Spring Boot 提供了強大的事務管理功能,使得開發者可以輕松地定義和管理事務。本文將詳細介紹 Spring Boot 中的事務管理,包括事務傳播行為、事務…

poetry使用

1.初始化 package name 填入口文件名 poetry init2.在本目錄下虛擬 poetry config virtualenvs.in-project true 3.自動生成依賴文件和vent虛擬環境,管理本項目下載包 poetry add flask pandas numpy 4 4.下載依賴 poetry install 5.查看都安裝了什么包 poe…

Git 新建本地分支并關聯到遠程倉庫

文章目錄 1、方法一2、方法二 1、方法一 A、新建本地分支: git checkout -b new-branch-nameB、push新分支到遠程倉庫: git push origin newBranchC、本地分支關聯到遠程(選一個即可): git branch --set…

一條SQL在mysql數據庫中經歷的過程

SQL語句在MySQL數據庫中普遍經歷的過程如下: 客戶端發起查詢請求到MySQL數據庫服務器監聽端口; MySQL數據庫server端接收到請求; server端從已有的連接池或者新建一個線程,用來處理客戶端發起的請求; server層…

Compose 的產生和原理

引言 compose 出現的目的: 重新定義android 上ui 的編寫方式。為了提高android 原生ui開發效率。讓android 的UI開發方式跟上時代。 正文 compose 是什么? 就是一套ui框架 和flutter 一樣是一套ui框架 Flutter:跨平臺開發趨勢與企業應用的…

【計算機網絡】一二章

一 二 非常棒的例子 相同的傳播時延,帶寬越大,該鏈路上所能容納的比特數越多 相同的傳播時延,帶寬越大,該鏈路上所能容納的比特數越多 往返時間(Round-Trip Time,RTT)s是指從發送端發送數據分組…

微軟OneNote無法同步解決方案

目錄 前言原因UWP特性 解決方案C***h注冊表 參考鏈接 前言 假設有多臺Windows電腦,最方便且免費的多設備筆記同步方案就是微軟自家的OneNote,使用OneDrive自帶的5G云存儲。 但是在國內大陸的OneNote,經常會出現無法同步、同步失敗&#xff1…

《商業智能(BI)的演進:從數據倉庫到智能決策》

01、什么是商業智能BI? 商業智能BI - 派可數據商業智能BI可視化分析平臺 首先要了解什么是商業智能BI( Business Intelligence )?百度商業智能BI有很多很多官方的定義,各種解釋,實際上從這么多年的經驗出發…

云鑰科技工業相機定制服務,助力企業實現智能智造

在工業自動化、智能制造和機器視覺快速發展的今天,工業相機作為核心感知設備,其性能直接決定了檢測精度、生產效率和產品質量。然而,標準化工業相機往往難以滿足復雜多樣的應用場景需求,?工業相機定制?逐漸成為企業突破技術瓶頸…

LeetCode[19]刪除鏈表的倒數第N個節點

思路: 要想一次循環,一趟遍歷完,那肯定是要想到雙指針了,但是雙指針怎么做呢?題目給出刪除倒數第N個,我們如果能找到倒數第N個節點的前一個節點就行了,倒數第N個肯定是倒著數,那我們…