資料處理之Pandas中資料型別轉換

2021-10-25 04:02:52 字數 2859 閱讀 2628

pandas中進行資料型別轉換有二種基本方法:

舉例資料

import numpy as np

import pandas as pd

data = pd.read_csv(

'data.csv'

, encoding=

'gbk'

)#因為資料中含有中文資料

1.使用astype()函式進行強制型別轉換

data[

'客戶編號'

].astype(

'object'

)data[

'客戶編號'

]= data[

'客戶編號'

].astype(

'object'

)

輸出結果:

但從上面這個例子來看,astype()函式還是不錯的,但是下面的例子就有點差強人意了。

data[

'2017'

].astype(

'float'

)

輸出結果:

'所屬組'

].astype(

'int'

)

輸出結果:

'狀態'

].astype(

'bool'

)輸出結果:

乍一看,結果看起來不錯,但仔細觀察後,會發現乙個大問題。那就是所有的值都被替換為true了,但是該列中包含好幾個n標誌,所以astype()函式在該列也是失效的。

總結一下astype()函式有效的情形:

資料列中的每乙個單位都能簡單的解釋為數字(2, 2.12等)

資料列中的每乙個單位都是數值型別且向字串object型別轉換

2.利用pandas的一些輔助函式進行型別轉換

pandas的astype()函式和複雜的自定函式之間有乙個中間段,那就是pandas的一些輔助函式。這些輔助函式對於某些特定資料型別的轉換非常有用(如to_numeric()、to_datetime())。所屬組資料列中包含乙個非數值,用astype()轉換出現了錯誤,然而用to_numeric()函式處理就好很多。

pd.to_numeric(data[

'所屬組'

], errors=

'coerce'

).fillna(

0)

輸出結果:

可以看到,非數值被替換成0.0了。

引數解釋:

arg :(標量,列表,元組,一維陣列或系列) 要轉換的引數。

errors :

, 預設為「raise」

如果為「 raise」,則無效的解析將引發異常。

如果為「coerce」,則將無效解析設定為nan。

如果為「 ignore」,則無效的解析將返回輸入。

downcast ,預設值 none,如果不是none;

並且資料已成功轉換為數字dtype(或者資料是從數字開始的),則根據以下規則將結果資料轉換為可能的最小數字dtype:

'integer'或'signed':最小的有符號int dtype(最小值:np.int8)

'unsigned' :最小的無符號int dtype(最小值:np.uint8)

'float' :最小的float dtype(最小值:np.float32)

pandas中的to_datetime()函式可以把單獨的year、month、day三列合併成乙個單獨的時間戳。

完成資料列的替換:

data[

'new_date'

]= pd.to_datetime(data[

['day'

,'month'

,'year']]

)#新產生的一列資料

data[

'所屬組'

]= pd.to_numeric(data[

'所屬組'

爬蟲 資料處理 pandas資料處理

使用duplicated 函式檢測重複的行,返回元素為布林型別的series物件,每個元素對應一行,如果該行不是第一次出現,則元素為true keep引數 指定保留哪一重複的行資料 dataframe替換操作 使用df.std 函式可以求得dataframe物件每一列的標準差 資料清洗清洗重複值 清...

pandas 資料處理

pandas中資料可以分為series,dataframe,panel分別表示一維至三維資料。其中在構造時,index表示行名,columns表示列名 構造方式 s pd.series data index index s pd series np random randn 5 index a b ...

pandas資料處理

dataframe.duplicated subset none,keep first 判斷dataframe中的資料是否有重複 必須一行中所有資料都重複才算重複,只能判斷行,不能判斷列 返回series dataframe.drop duplicates subset none,keep firs...