Pandas 資料處理: 如何處理數據型態自動推斷的問題?

閱讀時間約 8 分鐘

前言

在最近處理資料的過程中,我使用了 pandas 這個強大的工具來操作結構化的表格資料,特別是 CSV 格式的檔案。我遇到了一個挑戰:當不特別指定資料型別時,Pandas 會自動根據欄位內容推斷最合適的資料型態,如浮點數(float)、字串(str)、物件(object)等。這種自動推斷雖然方便,但也可能引發問題,尤其是當我們對於特定欄位的型別有所預期,卻因為自動轉換而產生錯誤,尤其在後續的資料處理階段,錯誤的資料型態可能會被轉成字串進行進一步的操作,這不僅增加了錯誤的發生率,也可能改變資料原本的含義。

因此,本篇文章旨在探討在使用 pandas 處理資料時應注意的幾個關鍵點,以及思考是否存在更好的方法來處理這些資料,從而減少因資料型態問題而產生的錯誤,確保資料的原始意義得以保留。

raw-image

第一部分:Pandas 資料處理深入解析

1. 創造假資料

設定以下三個情境做實驗:

  • 欄位內容全部為數字
  • 數字和文字
  • 數字和 NA 值
import pandas as pd
import numpy as np

# 情境 1: 欄位全部為數字(譬如:ID號)
data1 = {
'ID': [1001, 1002, 1003, 1004],
'weight': [51.3, 30, 38.5, 92]
}

# 情境 2: 欄位包含數字和文字(譬如:產品編號和產品名稱)
data2 = {
'Product Code': ['001', '002', '003', 'A04'],
'Product Name': ['Table', 'Chair', 'Desk', 'Lamp']
}

# 情境 3: 欄位包含數字和 NA 值(譬如:員工的工作年數,未知值用 NA 代替)
data3 = {
'Employee Name': ['John Doe', 'Jane Smith', 'Emily Jones', 'Michael Brown'],
'Years of Service': [5, 8, np.nan, 2]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)

# 儲存為 CSV 檔案
df1.to_csv('sample_data_scenario1.csv', index=False)
df2.to_csv('sample_data_scenario2.csv', index=False)
df3.to_csv('sample_data_scenario3.csv', index=False)
raw-image


2. Pandas 自動判讀的結果

三個資料案例分別的 data info ,在不指定型別的情況下,Pandas 自動判讀的結果:

  • df1: 兩個欄位分別是 int64 和 float64
raw-image
  • df2 : 兩個欄位都具有文字,所以都是 object
raw-image
  • df3: 一個欄位是文字,所以是 object ;
    另外一個欄位沒有文字只有 na 和數字,所以是 float64
raw-image


3.Pandas 讀取時指定型別

  • 所有統一個型別
raw-image
  • 依照各別欄位指定型別,用 dict 方式傳入,key 是 col name , value 是型別
raw-image


4. 讀取後做轉換 (小心使用)

有些狀況可行,但有些狀況會有問題這要特別小心

df3 = pd.read_csv('sample_data_scenario3.csv')
df3['Years of Service'] = df3['Years of Service'].astype('string')

這個情況型別就從 float 轉換成 string 了。

但是我稍微變形一下資料

raw-image

欄位中具有 na 、也有 float 、也有為 0 開頭的數字

如果要保留資料最原始的樣子,那 read 後再去轉型別的話就會改變資料內容

raw-image

原本第一列的 0005 ,就會變成 5.0 ,這樣就不太對,即使現在型別已經是 string 了!所以使用這個方法時要特別小心!


第二部分:尋找CSV之外的數據儲存方案

使用 CSV 檔案和 Pandas 時,數據型別自動轉換是一個常見的問題。CSV 是一種文本格式,不直接支持數據型別的元信息,這就導致了在讀取和寫入數據時可能會發生數據型別的不一致性問題。為了解決這個問題,可以考慮使用支持數據型別元信息的格式來存儲數據,比如 PickleNumPy 的二進制格式,或者使用更現代的數據格式如 ParquetHDF5。以下是這些方法的一些特點和使用示例:

1. 使用 Pickle 格式

Pickle 是 Python 的內建模塊,可以序列化和反序列化 Python 對象結構。使用 Pickle 格式可以保留數據的原始型別,但要注意,Pickle 是 Python 特有的,並且可能不是跨語言或長期數據存儲的最佳選擇。

# 將 DataFrame 存儲為 Pickle 文件
df.to_pickle('/path/to/your_data.pkl')

# 從 Pickle 文件讀取 DataFrame
df = pd.read_pickle('/path/to/your_data.pkl')

2. 使用 NumPy 的二進制格式

如果您的數據主要是數值型數據,可以考慮使用 NumPy 的二進制格式來存儲。這種格式適用於大型數值數據集,可以有效地保存和加載數據。

import numpy as np

# 將數據保存為 NumPy 的二進制格式
np.save('/path/to/your_data.npy', df.values)

# 從二進制文件加載數據
data = np.load('/path/to/your_data.npy')
df = pd.DataFrame(data, columns=['Column1', 'Column2']) # 需要手動指定列名

3. 使用 HDF5 格式

HDF5 是一種管理大型數據集的文件格式,支持多種類型的數據。它適合於大規模數據存儲和高效的隨機訪問。


import h5py
import numpy as np

with h5py.File('example.h5', 'w') as file:
dataset = file.create_dataset("dataset_name", (100,), dtype='i') data = np.arange(100)
dataset[:] = data

結論:優化資料處理策略,確保數據的正確性

透過本文的探討,我們深入了解了使用 Pandas 處理 CSV 文件時遇到的挑戰,特別是關於資料型態自動推斷的問題,以及如何透過指定資料型態或進行適當的資料轉換來避免潛在的錯誤。此外,我們也找尋了 CSV 格式以外的數據儲存選項,包括 pickle、numpy 和 hdf5,這些方法各有其優勢和適用場景,能夠在不同的應用中提供更高的效率和靈活性。

從模擬數據的創建到數據的最終儲存,每一步都需謹慎考慮資料處理的策略,以確保數據準確性和處理效率。自動型別推斷雖然提供了便捷,但也可能導致不可預見的錯誤,(尤其沒有仔細規劃跟設計時,隨機出現錯誤除錯很花時間),因此在處理數據時應明確指定資料型態或使用更加穩定的資料處理格式來避免這些問題。

此外,隨著數據量的增加和分析需求的提高,採用 hdf5 更高效的數據儲存格式變得越來越重要。這些格式不僅可以提高讀寫速度,還能在保存和處理大規模數據集時節省存儲空間。選擇最適合特定需求的資料處理和儲存方法,可以顯著提高資料分析的效率和正確性。


avatar-img
33會員
43內容數
歡迎來到《桃花源記》專欄。這裡不僅是一個文字的集合,更是一個探索、夢想和自我發現的空間。在這個專欄中,我們將一同走進那些隱藏在日常生活中的"桃花源"——那些讓我們心動、讓我們反思、讓我們找到內心平靜的時刻和地方
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Karen的沙龍 的其他內容
上篇進一步認識基本的圖形架構與三大 Graph 算法,那首先從 shortest path 開始,我們會陸續去理解這些算法,以及可能的應用,如果還沒有看過上一篇的,可以點以下連結~那我們就開始吧! 【圖論Graph】Part1:初探圖形與圖形演算法之應用
本篇文章深入介紹了圖形的基本概念、組成和應用。從圖形的基本組成,到圖的類型與種類,再到圖形演算法的三大類型,本文將接續圖形領域的深入學習,並分享了對圖形的初步認識和學習方向的小心得。希望對正在學習圖形的人有所幫助。
0/5Graph
圖形演算法在資料處理上扮演重要角色。本文介紹圖形的歷史、定義、技術用途,以及為什麼我們要關心圖形演算法。文末還提及圖形演算法在機器學習領域的應用。下次將介紹更詳細的圖形演算法內容。
參加Leetcode的30 Days of Pandas挑戰,除了是學習的機會,更是練習熟悉pandas功能的機會。文章分享了挑戰簡介、題目描述、關鍵技術以及參加挑戰的心得。適合新手學習pandas,也可提升熟練度。
這篇文章將分享最近遇到 NVIDIA GPU driver 的問題,並提供瞭解決步驟,以及證實問題解決的測試方法。當您遇到類似問題時,可以參考這篇文章進行解決。文章中包含了定位庫文件目錄、備份和替換文件以及測試修改的步驟。
前言 前幾篇分享了 IBM Watsonx.ai 平台,以及在平台上使用 LLM 完成客戶體驗分析、與LLM串連處理較複雜的問題。在這一篇中,我們想來嘗試使用檢索增強生成(RAG)的技術,RAG 通過整合外部數據來增強基礎模型的回答能力,這不僅能解決模型訓練數據的局限性問題,還可以提供更精準和相關
上篇進一步認識基本的圖形架構與三大 Graph 算法,那首先從 shortest path 開始,我們會陸續去理解這些算法,以及可能的應用,如果還沒有看過上一篇的,可以點以下連結~那我們就開始吧! 【圖論Graph】Part1:初探圖形與圖形演算法之應用
本篇文章深入介紹了圖形的基本概念、組成和應用。從圖形的基本組成,到圖的類型與種類,再到圖形演算法的三大類型,本文將接續圖形領域的深入學習,並分享了對圖形的初步認識和學習方向的小心得。希望對正在學習圖形的人有所幫助。
0/5Graph
圖形演算法在資料處理上扮演重要角色。本文介紹圖形的歷史、定義、技術用途,以及為什麼我們要關心圖形演算法。文末還提及圖形演算法在機器學習領域的應用。下次將介紹更詳細的圖形演算法內容。
參加Leetcode的30 Days of Pandas挑戰,除了是學習的機會,更是練習熟悉pandas功能的機會。文章分享了挑戰簡介、題目描述、關鍵技術以及參加挑戰的心得。適合新手學習pandas,也可提升熟練度。
這篇文章將分享最近遇到 NVIDIA GPU driver 的問題,並提供瞭解決步驟,以及證實問題解決的測試方法。當您遇到類似問題時,可以參考這篇文章進行解決。文章中包含了定位庫文件目錄、備份和替換文件以及測試修改的步驟。
前言 前幾篇分享了 IBM Watsonx.ai 平台,以及在平台上使用 LLM 完成客戶體驗分析、與LLM串連處理較複雜的問題。在這一篇中,我們想來嘗試使用檢索增強生成(RAG)的技術,RAG 通過整合外部數據來增強基礎模型的回答能力,這不僅能解決模型訓練數據的局限性問題,還可以提供更精準和相關
你可能也想看
Google News 追蹤
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
Thumbnail
pandas是用於資料操縱和分析的Python軟體庫。它建造在 NumPy 基礎上,並為操縱數值表格和時間序列,提供了資料結構和運算操作。 Pandas 的主要資料結構包含 Series 和 DataFrame 物件,由於 Pandas 本身基 Numpy 所以在使用大量資料運算時效能表現也優於原
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
在數據分析的工作中,處理 CSV 檔案是一項基礎且重要的技能,CSV 格式的檔案是以純文字形式儲存表格數據,簡潔的結構使其普遍應用於數據儲存。本文將介紹如何使用Python 來讀取、處理和儲存 CSV 檔案。
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,將資料表做樞紐轉換,垂直方向是月份,水平方向是不同的城市,而表格內容是該城市在某個月份的溫度。 題目的原文敘述 測試範例 Example 1: Input: +--------------+-
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,將欄位grade的資料型別從原本的float變更為int整數型別。 題目的原文敘述 測試範例 Example 1: Input: DataFrame students: +------------
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表name欄位為檢查基準,刪除有缺失值None的 data rows。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ | s
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
Thumbnail
pandas是用於資料操縱和分析的Python軟體庫。它建造在 NumPy 基礎上,並為操縱數值表格和時間序列,提供了資料結構和運算操作。 Pandas 的主要資料結構包含 Series 和 DataFrame 物件,由於 Pandas 本身基 Numpy 所以在使用大量資料運算時效能表現也優於原
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
在數據分析的工作中,處理 CSV 檔案是一項基礎且重要的技能,CSV 格式的檔案是以純文字形式儲存表格數據,簡潔的結構使其普遍應用於數據儲存。本文將介紹如何使用Python 來讀取、處理和儲存 CSV 檔案。
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表為基礎,將資料表做樞紐轉換,垂直方向是月份,水平方向是不同的城市,而表格內容是該城市在某個月份的溫度。 題目的原文敘述 測試範例 Example 1: Input: +--------------+-
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,將欄位grade的資料型別從原本的float變更為int整數型別。 題目的原文敘述 測試範例 Example 1: Input: DataFrame students: +------------
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表name欄位為檢查基準,刪除有缺失值None的 data rows。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ | s