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...