使用 Pandas 進行多格式數據整合:從 Excel、JSON 到 HTML 的處理實戰

前言

在數據處理與分析的實際場景中,我們經常需要整合不同格式的數據,例如 Excel 表格、JSON 配置文件、HTML 報表等。本文以一個具體任務(藍橋杯模擬練習題)為例,詳細講解如何使用 Python 的 Pandas 庫結合其他工具,將三種不同格式的數據文件合并為統一的結構化輸出,滿足業務分析的需求。

題目地址:

1.數據處理 - 藍橋云課

本文主要解釋大佬的題解

一、任務背景與目標

1.任務描述

我們需要合并三個文件的數據:

  • 2022_january.xlsx(Excel 表格):存儲 1 月的消費數據
  • 2022_february.json(JSON 文件):存儲 2 月的消費數據
  • 2022_may.html(HTML 文件):存儲 5 月的消費數據

2.目標輸出

最終數據需整合成一個字典,結構如下:

{"january": {"1-1": {"food": 123, "clothes": 456, ...},  # 1月1日消費數據"1-2": {...}},"february": { ... },"may": { ... }
}

每個月份的每一天數據需包含固定的 6 個消費類別(food, clothes, vehicle, sports, loans, other),缺失類別默認值為 0。

二、數據處理全流程解析

一、任務核心目標

將?ExcelJSONHTML?三種格式的數據文件,按月份 - 日期 - 消費類別的層級結構合并為統一的字典,具體要求:

  1. 鍵名規范:月份用英文(january/february/may),日期格式為?M-d(如?1-5)。
  2. 消費類別:固定 6 個類別(food,?clothes,?vehicle,?sports,?loans,?other),缺失值默認 0。

二、分格式數據處理步驟

1.?Excel 文件(2022_january.xlsx)處理

核心問題:從表格中提取日期和消費數據,轉換為指定格式。
關鍵步驟

# 1. 讀取文件并跳過無效行,指定索引列
data_1_xlsx = pd.read_excel('/home/project/2022_january.xlsx', skiprows=4, index_col=2)
# 2. 刪除無關列(前兩列可能為序號或說明,非數據列)
data_1_xlsx = data_1_xlsx.drop(data_1_xlsx.columns[[0, 1]], axis=1)
# 3. 日期格式處理:轉換為 datetime 后格式化為 M-d(如 1-5,去掉前導零)
data_1_xlsx.index = pd.to_datetime(data_1_xlsx.index).strftime('%-m-%-d')
# 4. 轉換為字典:{日期: {類別: 金額}}
data_1 = {'january': data_1_xlsx.to_dict('index')}

技術點

  • skiprows=4:跳過前 4 行無用數據(如標題、說明行),確保從有效數據行開始讀取。
  • index_col=2:將第 3 列(索引 2)作為日期列(假設該列存儲日期信息)。
  • strftime('%-m-%-d'):生成無 lead-zero 的日期(如?1-1?而非?01-01),嚴格匹配題目要求。
2.?JSON 文件(2022_february.json)處理

核心問題:直接加載 JSON 數據,確保格式符合要求。
關鍵步驟

with open('/home/project/2022_february.json', 'r') as jsonf:data_2 = json.load(jsonf)

技術點

  • JSON 文件結構假設為?{日期: {類別: 金額}},與目標格式一致,可直接加載。
  • 若原始數據缺失類別(題目未提及),需補全;但根據正確代碼,此處直接使用原始數據(可能已滿足要求)。
3.?HTML 文件(2022_may.html)處理

核心問題:解析 HTML 表格,提取日期和消費數據。
關鍵步驟

# 1. 解析HTML并提取所有表頭文本
with open('/home/project/2022_may.html', 'r') as htmlf:data_5_html = htmlf.read()
data_5_html = BeautifulSoup(data_5_html, 'lxml')  # 使用高效解析器
headers = [body.text for body in data_5_html.find_all('th')]  # 提取所有表頭# 2. 按7個字段一組處理數據(1個日期+6個消費類別)
data_5 = {"may": {}}
for i in range(7, len(headers), 7):  # 從第7個元素開始(跳過表頭說明)date = headers[i]  # 日期字段(第i個元素)values = headers[i:i+7]  # 7個字段:日期+6個類別(實際用后6個)day_data = {headers[j]: int(values[j]) for j in range(i+1, i+7)}  # 提取后6個類別data_5['may'][date] = day_data

技術點

  • 表格結構分析:假設 HTML 表格的表頭和數據行按固定格式排列,每個日期對應 7 個字段(日期 + 6 個類別)。
  • 索引計算:通過?range(7, len(headers), 7)?分組,每組第一個元素為日期,后續 6 個為消費金額。
  • 類型轉換:金額轉換為整數(int(values[j])),與題目示例輸出一致。

三、數據合并與格式校驗

1.?合并三部分數據
data = {**data_1, **data_2, **data_5}

原理:使用字典解包(**)將三個月份的數據合并,鍵名(january/february/may)自動拼接,避免重復。

2.?格式校驗關鍵點
  • 日期格式:所有日期鍵必須為?M-d?形式(如?1-1),通過?strftime?或直接提取確保一致性。
  • 消費類別:確保每個日期的字典包含全部 6 個類別(題目示例中other默認 0,但原始數據可能已包含,無需額外補全)。
  • 絕對路徑:使用題目規定的絕對路徑(如?/home/project/...),避免文件讀取錯誤。

四、完整代碼邏輯總結

  1. Excel 處理:?跳過無效行,選擇正確索引列,格式化日期,轉換為字典。
  2. JSON 處理:直接加載,假設數據結構已符合要求(鍵為日期,值為類別金額)。
  3. HTML 處理:解析表格,按固定字段分組提取日期和消費數據,轉換為整數。
  4. 合并:通過字典解包合并三部分數據,確保鍵名和格式完全符合目標結構。

五、易錯點與解決方案

  1. 文件路徑錯誤:必須使用絕對路徑(題目明確要求),避免因工作目錄變化導致的?FileNotFoundError
  2. 日期格式不匹配:使用?pd.to_datetime?和?strftime?嚴格控制日期格式,確保無前導零(如?%-m)。
  3. 表格結構解析錯誤:通過打印?headers?或數據行調試,確認 HTML 表格的字段順序和分組邏輯(如每組 7 個字段)。
  4. 數據類型不一致:消費金額統一為整數(與示例一致),使用?int()?轉換,避免浮點型誤差。

六、總結

本題核心是多格式數據的解析與結構化轉換,需針對每種格式的特點選擇合適的庫(pandas?處理表格,json?處理鍵值對,BeautifulSoup?處理 HTML 表格),并嚴格按照題目要求的層級結構組織數據。關鍵在于格式細節的精確匹配(日期、類別名稱、數據類型),以及通過調試確保每一步解析后的數據結構符合預期。

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

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

相關文章

今日行情明日機會——20250425

指數依然在震蕩,等待方向選擇,整體量能不搞但個股紅多綠少。 2025年4月25日漲停板行業方向分析如下: 一、核心行業方向及驅動邏輯 一季報增長(17家漲停) 核心個股:惠而浦、鴻博股份、衛星化學驅動邏輯&am…

Python 快速獲取Excel工作表名稱

文章目錄 前言準備工作Python 獲取Excel中所有工作表的名稱Python 獲取Excel中隱藏工作表的名稱 前言 在數據分析與辦公自動化領域,通過Python處理Excel文件已成為必備技能。通過獲取工作表名稱,我們可以: 快速了解文件結構自動化處理多工作…

寧德時代25年時代長安動力電池社招入職測評SHL題庫Verify測評語言理解數字推理真題

測試分為語言和數字兩部分,測試時間各為17分鐘,測試正式開始后不能中斷或暫停

ECMAScript 1(ES1):JavaScript 的開端

1. 版本背景與發布 ●發布時間:1997 年 6 月,由 ECMA International 正式發布,標準編號為 ECMA-262。 ●歷史意義:ES1 是 JavaScript 的首個標準化版本,結束了 Netscape Navigator 與 Internet Explorer 瀏覽器間腳本語…

C語言面試高頻題——define 和typedef 的區別?

1. 基本概念 (1) #define 定義:#define 是預處理指令,用于定義宏。作用:在編譯之前進行文本替換。語法:#define 宏名 替換內容示例:#define PI 3.14159 #define SQUARE(x) ((x) * (x))(2) typedef 定義:…

【自然語言處理與大模型】模型壓縮技術之蒸餾

知識蒸餾是一種模型壓縮技術,主要用于將大型模型(教師模型)的知識轉移到更小的模型(學生模型)中。在大語言模型領域,這一技術特別重要。 知識蒸餾的核心思想是利用教師模型的輸出作為軟標簽(sof…

PHP CURL發送POST請求(支持HEADER參數配置)

/** POST請求(raw數據請求,支持HEADER參數配置) * @param $url * @param $datas 支持數組或字符串 * # $CURLOPT_HTTPHEADER = [ X-AjaxPro-Method:ShowList, Content-Type: application/json; charset=utf-8, Content-Length: . strlen($data_string)]; …

利用JMeter代理服務器方式實現高效壓測

前言 在當今快節奏的互聯網時代,確保Web應用和服務能夠在高負載下穩定運行變得至關重要。無論是電子商務平臺、社交媒體網絡還是在線教育服務,用戶對網站響應速度和穩定性的期望從未如此之高。因此,性能測試不再是一個可選項,而是…

【JavaWeb后端開發04】java操作數據庫(JDBC + Mybatis+ yml格式)詳解

文章目錄 1. 前言2. JDBC2.1 介紹2.2 入門程序2.2.1 DataGrip2.2.2 在IDEA執行sql語句 2.3 查詢數據案例2.3.1 需求2.3.2 準備工作2.3.3 AI代碼實現2.3.4 代碼剖析2.3.4.1 ResultSet2.3.4.2 預編譯SQL2.3.4.2.1 SQL注入2.3.4.2.2 SQL注入解決2.3.4.2.3 性能更高 2.4 增刪改數據…

力扣-240.搜索二維矩陣 II

題目描述 編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性&#xff1a; 每行的元素從左到右升序排列。每列的元素從上到下升序排列。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, in…

Spark-Streaming(三)

一. kafka和flume的整合 任務需求一:利用flume監控某目錄中新生成的文件&#xff0c;將監控到的變更數據發送給kafka&#xff0c;kafka將收到的數據打印到控制臺 1. 在flume/conf/目錄下添加flume-kafka.conf文件 配置文件如下 2. 啟動flume和kafka消費者 3. 傳入數據 查看fl…

Spring Boot 啟動生命周期詳解

Spring Boot 啟動生命周期詳解 1. 啟動階段劃分 Spring Boot 啟動過程分為 4個核心階段&#xff0c;每個階段涉及不同的核心類和執行邏輯&#xff1a; 階段 1&#xff1a;預初始化&#xff08;Pre-initialization&#xff09; 目標&#xff1a;準備啟動器和環境配置關鍵類&am…

《深入理解 AOP》

一、AOP 是什么 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面編程&#xff0c;是軟件開發中一種重要的編程范式。它通過橫向抽取機制&#xff0c;將那些與業務邏輯本身無關、卻為業務模塊所共同調用的邏輯或責任&#xff08;如事務處理、日…

Python【協程(Coroutine)和線程的關系】

協程(Coroutine)和線程都是實現并發編程的技術&#xff0c;但它們在實現方式、使用場景和性能上有顯著區別。理解它們的關系與差異有助于在實際應用中選擇合適的并發模型&#xff0c;以下是它們的核心關系與對比分析&#xff1a; 一、核心關系 互補關系 協程和線程可以結合使用…

Springboot——Redis的使用

在當今的軟件開發領域&#xff0c;緩存技術是提升應用性能的關鍵手段之一。Redis 作為一款高性能的鍵值對存儲數據庫&#xff0c;憑借其出色的讀寫速度和豐富的數據結構&#xff0c;在緩存場景中得到了廣泛應用。Spring Boot 作為一款簡化 Spring 應用開發的框架&#xff0c;與…

BEVPoolv2:A Cutting-edge Implementation of BEVDet Toward Deployment

背景 該論文是在BEVDet的基礎上進行了一個調整優化&#xff0c;傳統的方法是將特征圖與深度預測進行外積得到視椎特征圖&#xff0c;再將它與預處理好的體素索引結合&#xff0c;將每個視椎特征分類到每個voxel中進行累加和的操作。BEVFusion與BEVDepth等方法是避免了累加和&a…

藍橋杯常考的找規律題

目錄 靈感來源&#xff1a; B站視頻鏈接&#xff1a; 找規律題具有什么樣的特點&#xff1a; 報數游戲&#xff08;Java組&#xff09;&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路詳解&#xff1a; 代碼詳解&#xff1a; 階乘求和&#xff08;Java組…

使用ffmpeg 將圖片合成為視頻,填充模糊背景,并添加兩段音樂

1.輸入3張圖片,每張播放一次,播放兩秒,視頻分辨率設置為1920:1080,每張圖片前0.3秒淡入,后0.3秒淡出,圖片寬高比不變,用白色填充空白區域 ffmpeg -loop 1 -t 2 -i "img1.jpg" \-loop 1 -t 2 -i "img2.jpg" \-loop 1 -t 2 -i "img3.jpg" \-filte…

PostgreSQL技術內幕29:事件觸發器tag原理解析

文章目錄 0.簡介1.概念說明2.tag的生成和存儲2.1 tag合法性校驗2.2 內存中存儲2.3 持久化存儲 3.tag的觸發 0.簡介 在上一篇文章中中&#xff0c;我們介紹了PG中的兩種觸發器&#xff0c;即適合于DML的普通觸發器和對于DDL的事件觸發器&#xff0c;其中事件觸發器與常規的 DML…

mysql 導入很慢,如何解決

精選 原創 碼出財富2025-04-14 17:35:14博主文章分類&#xff1a;數據庫©著作權 文章標簽mysql數據庫用戶名文章分類MySQL數據庫yyds干貨盤點閱讀數184 導入大型 SQL 文件到 MySQL 數據庫時&#xff0c;速度可能會受到影響。以下是一些優化方法和建議&#xff0c;幫助你…