變變變!Pandas 輕鬆轉換數據類型

2021-12-29 喜悅家學Python

書接上回,對獲取的數據去空去重和選擇之後,我們得到了要比較乾淨的數據,但這只是完成了第一步,在進一步計算和分析之前,還需要確定數據是否是我們想要的數據類型:

比如,如果要進行數據列之間的加減乘除計算,需要數據列都是數值型(整數或小數),如果要對日期列進行篩選和計算,需要數據是日期和時間類型(2021-12-31)。

總而言之,數據就是要分門別類,整整齊齊,我們才能絲滑處理!

那麼pandas 自帶的數據類型都有哪些呢?先來看一下:

可以看出,pandas支持的數據類型很多樣,基本涵蓋了我們的需要。我們來實際應用一下。

獲取數據

老規矩,首先使用pd.read_excel()讀取數據,賦給數據框df:

import pandas as pddf = pd.read_excel('sale_data.xlsx')df.head()


df.head()列印前5行,可以看到只有「客戶編號」和「購買數量」是純數字型的(int 表示整數),涉及到金額的幾列數據都帶有符號(¥、%),肯定無法直接進行運算。

我們使用df.info()方法查看數據概況:發現有8列數據類型是object, 即文本型數據,無法直接進行計算。


接下來一起看看常用的數據類型轉換的方法。



首先看看最常用的.astype(),這個方法可以直接將某列數據轉換為另一種類型,在括號內輸入文本型的'int' 或'float', 即可轉為整數型和浮點數型(小數型):

df['購買數量'] = df['購買數量'].astype('int')

df['購買數量'] = df['購買數量'].astype('float')



接下來,使用函數的方法處理一下帶有貨幣符號和百分比符號的數據。

這裡有兩種方法,分別是自定義函數和匿名函數lambda:

 自定義函數

def currency_converter(x):     new_x = x.replace('¥','')     return float(new_x) lis = ['購買單價','總金額','2020年總金額','2019年總金額']for i in lis:        df[i] = df[i].apply(currency_converter)    

使用更簡單的匿名函數方式,即不需要自行定義,配合apply 方法使用,一行代碼實現同樣的效果:
lis = ['購買單價','總金額','2020年總金額','2019年總金額']for i in lis:    df[i] = df[i].apply(lambda x : x.replace('¥','')).astype('float')    

同樣的lambda方法,可以對「活躍用戶」一列用數字0和1替換,1代表活躍用戶:
df['活躍客戶'] = df['活躍客戶'].apply(lambda x : 1 if x=='是' else 0)

最後來看一下,使用pandas的.to_datetime()方法把「購買日期」轉為日期類型 ,以及 .to_numeric()把方法「購買數量」轉為數值型:
df['購買日期'] = pd.to_datetime(df['購買日期'])

df['購買數量'] = pd.to_numeric(df['購買數量'])

a. 使用.dt方法將年月日拆分為三列:

df['購買日期-年'] = df['購買日期'].dt.year df['購買日期-月'] = df['購買日期'].dt.monthdf['購買日期-日'] = df['購買日期'].dt.day

df[df['購買日期'].dt.month == 2]

當讀取的數據列中的數據不是我們想要的類型時,可以對列使用以下方法轉換,縱享絲滑!

.astype() 直接轉換數據類型

.apply()和lambda配合使用,一行代碼實現轉換

.to_datetime() 轉換為日期時間類型,方便進行時間相關計算。

公眾號後臺回覆:轉換,獲取源數據和代碼,說一千道一萬,不如自己來一遍!



喜悅玩python,Happy coding!

相關焦點

  • 數據科學 | 從 Pandas 小白到 Pandas 能手
    在本文中,作者從 Pandas 的簡介開始,一步一步講解了 Pandas 的發展現狀、內存優化等問題。這是一篇最佳實踐教程,既適合用過 Pandas 的讀者,也適合沒用過但想要上手的小白。通過本文,你將有望發現一到多種用 pandas 編碼的新方法。Pandas 發展現狀;內存優化;索引;方法鏈;隨機提示。
  • Pandas 數據結構 - Series
    Pandas Series 類似表格中的一個列(column),類似於一維數組,可以保存任何數據類型。
  • Pandas 數據處理|Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date =
  • pandas 最基本的時間類型:時間戳、時間差、時間索引
    ‍‍‍‍日期或時間等時間類型數據在金融、經濟等領域用途十分廣泛。
  • Pandas 數據處理 | Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date
  • 吹爆這個 pandas GUI 神器,自動轉代碼!
    替換和類型轉換替換選項可以替換表中某些固定值或者填充空值。可以inplace=True替換某列或者創建一個新列。同時,替換類型可以定義為:特定值、空格或特定字符串的替換。現在,我可以使用類型轉換選項輕鬆地將date_published列的數據類型從字符串更改為日期時間,同時提供了inplace或new columns更改的選項:
  • 更高效地利用 Jupyter+pandas 進行數據分析,6 種常用數據格式效率對比!
    ,Jupyter Notebook 是一個非常強力的工具,在數據集不是很大的情況下,我們可以使用 pandas 輕鬆對 txt 或 csv 等純文本格式數據進行讀寫。然而當數據集的維度或者體積很大時,將數據保存並加載回內存的過程就會變慢,並且每次啟動 Jupyter Notebook 時都需要等待一段時間直到數據重新加載, 這樣 csv 格式或任何其他純文本格式數據都失去了吸引力。
  • 利用 pandas 和 xarray 整理氣象站點數據
    文件讀取與預處理import numpy as npimport pandas as pdimport xarray as xrimport matplotlib.pyplot as plt處理時間坐標,利用 datetime 將整形的年、月、日轉換為 pandas 的時間戳
  • Python數據清洗--類型轉換和冗餘數據刪除
    作者將通過三篇文章,詳細講解工作中常規的數據清洗方法,包括數據類型的轉換,重複數據的處理,缺失值的處理以及異常數據的識別和處理。這是第一篇文章,主要分享的內容包括,文中涉及到的數據可以至文末查看下載連結:數據類型的轉換冗餘數據的識別和處理數據類型的判斷和轉換如下表所示,為某公司用戶的個人信息和交易數據,涉及的欄位為用戶id、性別、年齡、受教育水平、交易金額和交易日期。
  • 通過 SQL 查詢學習 Pandas 數據處理
    ://shzhangji.com/cnblogs/2017/07/23/learn-pandas-from-a-sql-perspective/Pandas 是一款廣泛使用的數據處理工具。結合 NumPy 和 Matplotlib 類庫,我們可以在內存中進行高性能的數據清洗、轉換、分析及可視化工作。雖然 Python 本身是一門非常容易學習的語言,但要熟練掌握 Pandas 豐富的 API 接口及正確的使用方式,還是需要投入一定時間的。對於數據開發工程師或分析師而言,SQL 語言是標準的數據查詢工具。
  • 【pandas 基礎】
    構建的含有更高級數據結構和工具的數據分析包類似於 Numpy 的核心是 ndarray,pandas 也是圍繞著 Series 和 DataFrame 兩個核心數據結構展開的 。pandas 約定俗成的導入方法如下:lang:pythonfrom pandas import Series,DataFrameimport pandas as pd<br />SeriesSeries 可以看做一個定長的有序字典。
  • Python 數據分析:Pandas 進階
    概述我們在上一篇文章初識 Pandas中已經對 Pandas 作了一些基本介紹,本文我們進一步來學習 Pandas 的一些使用。2. 缺失項在現實中我們獲取到的數據有時會存在缺失項問題,對於這樣的數據,我們通常需要做一些基本處理,下面我們通過示例來看一下。
  • Datawhale組隊學習-pandas task08 文本數據
    2. []索引器對於 str 對象而言,可理解為其對字符串進行了序列化的操作,例如在一般的字符串中,通過 [] 可以取出某個位置的元素:同時也能通過切片得到子串:通過對 str 對象使用 [] 索引器,可以完成完全一致的功能,並且如果超出範圍則返回缺失值:3. string類型在上一章提到,從 pandas 的 1.0.0 版本開始,引入了 string
  • 數據分析利器 pandas 系列教程(一):從 Series 說起
    從今天開始連載數據分析利器 pandas 的系列文章,推薦 Pycharm 集成 Python3.6+;無論你是零基礎小白,還是已經上手過 pandas,你都可以在本次系列中學到一些乾貨。摘自百度百科:pandas 是基於 numpy 的一種工具,該工具是為了解決數據分析任務而創建的。
  • 100 個 pandas 數據分析函數總結
    (點擊上方快速關注並設置為星標,一起學Python)來源:數據分析1480
  • 數據處理必看:如何讓你的 pandas 循環加快 71803 倍
    雷鋒網 AI 開發者按,如果你使用 python 和 pandas 進行數據分析,那麼不久你就會第一次使用循環了。然而,即使是對小型數據集,使用標準循環也很費時,你很快就會意識到大型數據幀可能需要很長的時間。當我第一次等了半個多小時來執行代碼時,我找到了接下來想與你共享的替代方案。標準循環數據幀是具有行和列的 pandas 對象。
  • 5分鐘掌握Pandas GroupBy
    當我們對一組數據執行某種計算或計算統計信息時,通常對整個數據集進行統計是不夠的。取而代之的是,我們通常希望將數據分成幾組,並執行相應計算,然後比較不同組之間的結果。假設我們是一個數字營銷團隊,正在調查最近轉換率下降的潛在原因。從整體來看轉化率並不能讓我們找到可能的原因。
  • Python 數據處理庫 pandas 入門教程
    關於如何獲取pandas請參閱官網上的說明:pandas Installation。這兩種類型的數據結構對比如下:名稱維度說明Series1維帶有標籤的同構類型數組DataFrame2維表格結構,帶有標籤,大小可變,且可以包含異構的數據列DataFrame可以看做是Series的容器,即:一個DataFrame中可以包含若干個Series。註:在0.20.0版本之前,還有一個三維的數據結構,名稱為Panel。
  • 國外大神製作的超棒 Pandas 可視化教程
    Pandas 不僅允許我們加載電子表格,而且支持對加載內容進行預處理。Pandas 有個核心類型叫 DataFrame。DataFrame 是表格型的數據結構。因此,我們可以將其當做表格。DataFrame 是以表格類似展示,而且還包含行標籤、列標籤。另外,每列可以是不同的值類型(數值、字符串、布爾型等)。我們可以使用 read_csv() 來加載 CSV 文件。
  • Pandas 必知必會的使用技巧,值得收藏!
    df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]}) df df.iloc