【跟著stackoverflow學Pandas】- Pandas修改列的類型

2021-01-12 上帝的bug
Pandas: change data type of columns - Pandas修改列的類型

我們利用pandas進行數據處理經常會遇到數據類型不符的問題,一般需要進行數據類型的轉化,這篇文章就介紹pandas裡面的數據類型及轉換。


數據集

import pandas as pd
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['col1', 'col2', 'col3'])
print df.head()
# col1 col2 col3
# 0 a 1.2 4.2
# 1 b 70 0.03
# 2 x 5 0

print df.dtypes
# col1 object
# col2 object
# col3 object
# dtype: object

這裡的3列數據,col1是明顯的字符數據,col2、col3是數值型數據,但是因為數據在導入時加了引號,按照字符串數據來處理,如果我們想對他們進行數值操作,就需要進行轉換。

下面我們推薦幾種方法

pd.to_numeric

對於明顯是數值的數據,轉換類型直接採用 pd.to_numeric 就可以了,如果數據既有數值型又有字符型,那麼我們就要根據情況區別對待了。

s = pd.Series(['1', '2', '4.7', 'pandas', '10'])
# pd.to_numeric(s) # 如果直接轉換會報錯
# ValueError: Unable to parse string "pandas" at position 3

# 可以強制轉換,字符型數據就會變成 NaN,數據類型變為 float64
pd.to_numeric(s, errors='coerce')
# 0 1.0
# 1 2.0
# 2 4.7
# 3 NaN
# 4 10.0
# dtype: float64

# 也可以忽略錯誤,結果不做處理
pd.to_numeric(s, errors='ignore')
# 0 1
# 1 2
# 2 4.7
# 3 pandas
# 4 10
# dtype: object

如果有多個列需要轉換,可以採用apply進行批量操作。

df[['col2','col3']] = df[['col2','col3']].apply(pd.to_numeric, errors='ignore') # 同樣可以添加 errors 參數
print df
# col1 col2 col3
# 0 a 1.2 4.20
# 1 b 70.0 0.03
# 2 x 5.0 0.00

print df.dtypes
# col1 object
# col2 float64
# col3 float64
# dtype: object

相似的函數,還有 pd.to_datetime、pd.to_timedelta,可以實現對時間的轉換。

astype

pd.to_numeric 用起來很簡單,但是它把所有的變量都變成了float64,那麼如果數據是整形呢。我們可以試試 astype 函數。

a = [['a', '1', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
print df
# one two three
# 0 a 1 4.2
# 1 b 70 0.03
# 2 x 5 0

print df.dtypes
# one object
# two object
# three object
# dtype: object

# 批量操作
df[['two', 'three']] = df[['two', 'three']].astype(float)
print df.dtypes
# one object
# two float64
# three float64
# dtype: object


df['two'] = df['two'].astype(int)
print df.dtypes
# one object
# two int64
# three float64
# dtype: object

生成DataFrame時指定變量類型


df = pd.DataFrame(a, columns=['one', 'two', 'three'], dtype={'one': str, 'two': int, 'three': float})


infer_objects

如果數據很多無法判斷數據類型,可以採用 infer_objects(Pandas Version 0.21.0)

df = pd.DataFrame({'a': [7, 1, 5], 'b': ['3','2','1']}, dtype='object')
df.dtypes
# a object
# b object
# dtype: object

df = df.infer_objects()
df.dtypes
# a int64
# b object # 因為b列加了引號,推斷成了字符串
# dtype: object


相關焦點

  • PANDAS: 新手教程 一
    查看Pandas read_excel API了解更多詳細信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.htmlPandas支持很多其他數據類型。
  • pandas使用的25個技巧
    查看數據類型  假設你僅僅需要選取數值型的列,那麼你可以使用select_dtypes()函數:選取數值型列這包含了int和float型的列。  你也可以使用這個函數來選取數據類型為object的列:選取多種數據類型的列  你還可以用來排除特定的數據類型:
  • Python數據分析:pandas讀取和寫入數據
    表示索引列的位置,取值為sequence則代表多重索引usecols:array,指定讀取的列skiprows:從文件開頭算起,需要跳過的行數先在當前工作目錄下創建csv文件,如下圖可以看到這個csv文件包含三列數據,列名為studentNo,name,age。使用read_csv將這三列數據讀入到DataFrame。
  • 幾個Pandas參數設置小技巧
    在日常使用pandas的過程中,由於我們所分析的數據表規模、格式上的差異,使得同樣的函數或方法作用在不同數據上的效果存在差異。而pandas有著自己的一套「參數設置系統」,可以幫助我們在遇到不同的數據時靈活調節從而達到最好的效果,本文就將介紹pandas中常用的參數設置方面的知識
  • pandas基礎教程2
    選擇數據:我們在前面說pandas就像字典一樣,字典是可以通過鍵去選擇數據,同樣的pandas也是可以得,且pandas更強。DataFrame中的數據有兩個選取方式,df['A']或者df.A都可以,具體使用什麼方式看你的心情。
  • 從小白到大師,這裡有一份Pandas入門指南
    memory_usage():https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.memory_usage.html了解列的類型(https://pandas.pydata.org/pandas-docs/stable/getting_started/basics.html
  • Pandas的介紹與基本使用
    如果說沒有pandas的出現,目前的金融數據分析領域還應該是R語言的天下。2、Pandas能幹什麼Pandas的主要功能:具備對應其功能的數據結構DataFrame,Series集成時間序列功能提供豐富的數學運算和操作靈活處理缺失數據.....以上就是pandas能完成的一些基礎操作,當然並不完全,下面就來看看pandas到底是怎麼用的。
  • PANDAS: 新手教程 一 - 人工智慧遇見磐創
    查看Pandas read_excel API了解更多詳細信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.htmlPandas支持很多其他數據類型。
  • 6個提升效率的pandas小技巧
    pandas是python中常用的數據分析庫,出現頻率非常高,而且pandas功能之多讓人咋舌,即使pandas老手也沒法保證能高效使用pandas做數據分析。這篇文章目的梳理幾個高效實用的pandas小技巧,供大家參考。1.
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    pandas(pannel data analysis,面板數據分析),我個人覺得pandas用於數據分析處理有別於Python字典和列表的主要在於以下三點。運算效率提升,pandas是基於numpy寫的,換句話說也是c語言進行編寫並編譯成本地庫的,在運算效率會高很多。消耗資源少,因為pandas採用矩陣運算,在算法結構上比列表和字典組合數據消耗更少資源。
  • 超全的pandas數據分析常用函數總結(下篇)
    上篇文章中,小編給大家總結了數據分析中pandas這一模塊裡面常用函數的四個部分的內容,分別為導入模塊、創建數據集並讀取、數據查看與數據清洗,現在給大家介紹下篇的內容。來源 | 凹凸數據5.how決定要執行的合併類型:left(使用左框架中的鍵)、right、inner(交集,默認)、outer(併集)data_new=pd.merge(data,data2,on='id',how='inner') # 默認取交集data_new=pd.merge(data,data2,on='id',how='outer') # 取併集,沒有值的地方填充NaNdata.merge
  • pandas指南:做更高效的數據科學家
    pandas的初級功能1、邏輯運算如果要根據邏輯操作對數據進行運算,在使用& (AND)、~ (NOT)和| (OR)等邏輯操作之前和之後添加「(」&「)」。不要為同一列編寫多個OR,最好是使用.isin()函數。2、基本繪圖多虧了matplotlib包,這個特性才得以實現。
  • 如何使用Pandas-Profiling進行探索性數據分析
    這包括找出每個變量的數據類型、目標變量的分布、每個預測變量的不同值的數量、數據集中是否有重複值或缺失值等。進行EDA探索機器學習數據集的過程往往是非常耗時的。什麼是Pandas-Profiling?Pandas-profiling是一個開源Python庫,它只需一行代碼即可為任何機器學習數據集生成漂亮的交互式報告。
  • 如何通過一頓飯來說明NumPy與pandas的功用
    NumPy除了在相當程度上優化了Python計算過程,其自身還有較多的高級特性,如指定數組存儲的行優先或者列優先、廣播功能從而快速的對不同形狀的矩陣進行計算、ufunc類型的函數可以使得我們丟開循環而編寫出更為簡潔也更有效率的代碼、使用開源項目Numba編寫快速的NumPy函數,而Numba則是可以利用GPU進行運算的。
  • 嫌pandas慢又不想改代碼怎麼辦?來試試Modin
    DataFrame分區分區模式沿著列和行分區,因為它在列數和支持的行數方面給Modin提供了靈活性和可伸縮性。系統架構Modin被分成不同的層:Pandas API暴露在最頂層。意思是說modin的創造者分析了一下大多數人在pandas中所使用的操作。他們去了Kaggle並對那裡出現的腳本和筆記進行了大量搜索,並最終弄明白了最受歡迎的pandas方法如下:pd.read_csv是目前pandas中使用最多的方法,其次是pd.Dataframe。
  • pandas基礎教程1
    Pandas是基於Numpy構建的(不知道pandas和我們的國寶有什麼關係),而Numpy和Pandas的數據類型是在基礎數據類型上建立,彼此相關,又彼此不同。Numpy對象最重要特點向量化運算,pandas對象最重要特點是字典和列表混合。
  • 想讓pandas運行更快嗎?那就用Modin吧
    數據幀分區Modin 對數據幀的分區模式是沿著列和行同時進行劃分的,因為這樣為 Modins 在支持的列數和行數上都提供了靈活性和可伸縮性。系統架構Modin 被分為不同的層:Pandas API 在最頂層暴露給用戶。下一層為查詢編譯器,它接收來自 Pandas API 層的查詢並執行某些優化。
  • pandas庫中最重要的幾個知識點
    數據分析系列文章之Python基礎篇Python數據分析系列文章之NumpyPython數據分析系列文章之Pandas(上)Python數據分析系列文章之Pandas(下)Python數據分析系列文章之ScipyPython數據分析系列文章之MatplotlibPython數據分析系列文章之SeabornPython數據分析系列文章之PoltyPython數據分析系列文章之datetime本篇主要介紹pandas
  • 教程| pandas輕鬆入門 之 數據結構介紹 1
    pandas經常和其它工具一同使用,如數值計算工具NumPy和SciPy,分析庫statsmodels和scikit-learn,和數據可視化庫matplotlib。pandas是基於NumPy數組構建的,特別是基於數組的函數和不使用for循環的數據處理。雖然pandas採用了大量的NumPy編碼風格,但二者最大的不同是pandas是專門為處理表格和混雜數據設計的。
  • 懂Excel輕鬆入門Python數據分析包pandas(二十一):透視表
    接下來不再顯示 Excel 透視表操作pandas要做出透視表的效果,實際與Excel透視表的概念基本一致:參數 index 就是 Excel 透視表中的 行標籤參數 columns : Excel 透視表中的 列標籤參數 values:Excel 透視表中的 數值區域參數 aggfunc:Excel 透視表中的 數值區域 的欄位的統計方式(Excel 默認是計數)"好像少了點東西