pandas是基於NumPy構建的模塊,含有使數據分析更快更簡單的操作工具和數據結構,是數據分析必不可少的五個包之一。pandas包含序列Series和數據框DataFrame兩種最主要數據結構,索引Index是跟序列和數據框密切相關的數據結構。
通常情況下,引入pandas的約定,只要在代碼中看到pd,就要聯想到pandas:
import pandas as pd
一,數據結構
序列是由一組數據(各種NumPy數據類型),以及一組與之相關的數據標簽(索引)組成,序列不要求數據類型是相同的。序列可以看作是一維數組:
>>> obj=pd.Series([4,5,'a']) >>> obj 0 4 1 5 2 a dtype: object
序列的表現形式為:索引在左邊,值在右邊。由於沒有顯式為Series指定索引,pandas會自動創建一個從0到N-1的整數型索引。
數據框(DataFrame)是二維的關系表格型數據結構,含有一組有序的列,每列的數據類型是相同的,列與列之間的數據類型可以不同,也可以相同。數據框的邏輯結構是行和列,列有列名(或叫做列索引),行有行索引,還可以為行或列索引設置標簽。
序列和數據框之間是密切關聯的,可以認為序列(Series)是二維表格中的一列或者一行。實際上,當訪問DataFrame的一行時,pandas自動把該行轉換為序列;當訪問DataFrame的一列時,Pandas也自動把該列轉換為序列。
Index對象是序列和數據框必不可少的成分,負責管理軸標簽,軸名稱等元數據,對於數據框,行有行索引,列有列索引;對於序列,行索引是必備的。索引對象是不可修改的,類似一個固定大小的數組。
二,數據類型
在大多數情況下,pandas使用NumPy的數組和dtypes作為序列和數據框中列的數據類型,NumPy支持的數據類型是float、int、bool、timedelta64[ns]。pandas擴展了NumPy的類型系統,用dtype屬性來顯示元素的數據類型,pandas主要有以下幾種dtype:
- 字符串類型:object
- 整數類型:Int64,Int32,Int16, Int8
- 無符號整數:UInt64,UInt32,UInt16, UInt8
- 浮點數類型:float64,float32
- 日期和時間類型:datetime64[ns]、datetime64[ns, tz]、timedelta[ns]
- 布爾類型:bool
1,查看變量的類型
查看變量的數據類型,使用type(var)函數
type(obj)
2,特殊的objct類型
通常情況下,使用object表示字符類型;
>>> pd.Series(['a', 'b', 'c'], dtype="object") 0 a 1 b 2 c dtype: object
對於object類型,如果一個pandas對象在單列中包括多個dtype,那么使用object來容納所有的dtype。
# string data forces an ``object`` dtype In [333]: pd.Series([1, 2, 3, 6., 'foo']) Out[333]: 0 1 1 2 2 3 3 6 4 foo dtype: object
3,數值類型
pandas中的整數類型和浮點數類型可以為空(NULL),在定義數據組或序列時,使用dtype參數來定義整數類型:
arr = pd.array([1, 2, np.nan], dtype=pd.Int64Dtype()) pd.array([1, 2, np.nan], dtype="Int64") pd.Series([1, 2, np.nan], dtype="Int32")
使用float32、float64定義浮點數類型:
>>> pd.Series([1, 2, np.nan], dtype="float32") 0 1.0 1 2.0 2 NaN dtype: float32
4,日期和時間類型類型
datetime64[ns] 表示的是日期和時間類型
>>> pd.Series(['2018-07-01', '2019-07-01', '2019-10-01'], dtype="datetime64[ns]") 0 2018-07-01 1 2019-07-01 2 2019-10-01 dtype: datetime64[ns]
三,類型轉換
可以使用astype()函數,顯式把對象的類型從一個類型強制轉換為指定的數據類型:
>>> pd.Series(['2018-07-01', '2019-07-01', '2019-10-01']).astype('datetime64[ns]') 0 2018-07-01 1 2019-07-01 2 2019-10-01 dtype: datetime64[ns]
pandas還有類型轉換的特殊函數,用於轉換為特定的數據類型:
- to_numeric()
- to_datetime()
- to_timedelta()
比如,把序列轉換為日期類型:
>>> pd.to_datetime(pd.Series(['2018-07-01', '2019-07-01', '2019-10-01'])) 0 2018-07-01 1 2019-07-01 2 2019-10-01 dtype: datetime64[ns]
參考文檔:
