自己記錄,僅供參考
在數據處理時經常會遇到數據類型不匹配的事情,為了方便查看各種存儲方式中數據類型的改變。我把一些自己常用的整理方式記錄下來,希望可以為以后數據類型的處理工作提供便利。
數據常用的基本處理類型
1、字符串 2、布爾類型 3、整數 4、浮點數 5、日期
(1)單個變量的數據類型轉換及查看
單個變量的類型查看
1 In [82]: %paste 2 a='2' 3 type(a) 4 5 ## -- End pasted text -- 6 Out[82]: str
單個變量的類型轉換
數值轉字符串
1 In [84]: a='2' 2 ...: type(a) 3 ...: 4 Out[84]: str 5 6 In [85]: a=float(a) 7 ...: type(a) 8 ...: 9 Out[85]: float
字符串轉日期及日期運算結果轉為數字
1 In [96]: from datetime import timedelta 2 ...: import time,datetime 3 ...: changetime1='2016-12-11' 4 ...: changetime2='2016-12-14' 5 ...: t1= time.strptime(changetime1,"%Y-%m-%d") 6 ...: y,m,d = t1[0:3] 7 ...: change1=datetime.date(y,m,d) 8 ...: t2= time.strptime(changetime2,"%Y-%m-%d") 9 ...: y,m,d = t2[0:3] 10 ...: change2=datetime.date(y,m,d)#轉成日期格式 11 ...: tianshu=(change2-change1).days#轉成數值格式 12 ...: print(type(changetime1)) 13 ...: print(type(change1)) 14 ...: print(type(change2-change1)) 15 ...: print(type(tianshu)) 16 ...: 17 <class 'str'> 18 <class 'datetime.date'> 19 <class 'datetime.timedelta'> 20 <class 'int'>
(2) numpy內數據類型的轉變及查看
numpy類型
類型 | 類型代碼 | 說明 |
int8,uint8 | i1,u1 | 有符號和無符號的8位(1個字節)整型 |
int16,uint16 | i2,u2 | 有符號和無符號的16位(2個字節)整型 |
int32,uint32 | i4,u4 | 有符號和無符號的32位(4個字節)整型 |
int64,uint64 | i8,u8 | 有符號和無符號的64位(8個字節)整型 |
float16 | f2 | 半精度浮點數 |
float32 | f4或f | 標准的單精度浮點數。與c的float兼容 |
float64 | f8或d | 標准的雙精度浮點數。與c的double和python的float對象兼容 |
float128 | f16或g | 擴展精度浮點數 |
complex64,complex128 | c8,c16 | 分別用兩個32位,64位或128位浮點數表示的 |
complex256 | c32 | 復數 |
bool | ? | 存儲true和false值的布爾類型 |
obiect | O | python對象類型 |
string | S | 固定長度的字符串類型(每個字符1個字節) |
unicode | U | 固定長度的uincode類型(字數由平台決定)跟字符創的定義方式一樣(如U10) |
查看numpy的數據類型
1 In [99]: import numpy as np 2 ...: arr=np.array([1,2,3,4,5]) 3 ...: arr.dtype#查看數據類型 4 ...: 5 Out[99]: dtype('int32')
1 In [100]: arr1=np.array(['1','2','3','4','5']) 2 ...: arr1.dtype 3 ...: 4 Out[100]: dtype('<U1')#unicode類型
通過ndaary的astype方式顯示地轉換dtype
1 In [101]: arr1=np.array(['1','2','3','4','5']) 2 ...: print(arr1.dtype) 3 ...: arr2=arr1.astype(int) 4 ...: print(arr2.dtype) 5 ...: 6 <U1 7 int32
In [102]: arr2
Out[102]: array([1, 2, 3, 4, 5])#將unicode類型轉為int32
#轉為字符串
arr3=arr2.astype(np.str)
print(arr3.dtype)
## -- End pasted text --
<U11
(3)dataframe內數據類型的查看及更改
查看dataframe的數據類型
1 In [110]: %paste 2 import numpy as np 3 import pandas as pd 4 from pandas import Series,DataFrame 5 data={'state':['ni','hao','a'], 6 'year':[2111,3232,4546], 7 'age':['23','24','25']} 8 frame=DataFrame(data) 9 frame.dtypes#查看數據類型 10 11 ## -- End pasted text -- 12 Out[110]: 13 age object 14 state object 15 year int64 16 dtype: object
更改dataframe的數據類型
1 In [111]: %paste 2 import numpy as np 3 import pandas as pd 4 from pandas import Series,DataFrame 5 data={'state':['ni','hao','a'], 6 'year':[2111,3232,4546], 7 'age':['23','24','25']} 8 frame=DataFrame(data) 9 frame['age']=frame['age'].astype('int')#將age轉為int類型並替換原來的數據 10 frame.dtypes 11 12 ## -- End pasted text -- 13 Out[111]: 14 age int32 15 state object 16 year int64 17 dtype: object