pandas是基于NumPy構建的模塊,是數據分析必不可少的包之一,通常情況下,引入pandas的約定,隻要在代碼中看到pd,就要聯想到pandas:
import pandas as pd
pandas包含兩種最主要數據結構:序列(Series)和數據框(DataFrame)。對于這兩個數據結構,有兩個最基本的概念:軸(Axis)和标簽(Label),對于二維數據結構,軸是指行和列,軸标簽是指行的索引和列的名稱,存儲軸标簽的數據結構是Index結構。
對于這兩個數據結構,還有一個特性:數據對齊是天生存在的,軸和标簽之間的連接是内在的,不會被破壞,除非有意為之。這意味着,每行都有一個索引,通過索引可以定位到該行;每列都有一個列名,通過列名可以定位到該列;通過行索引和列名稱,可以唯一定位到一個唯一的數據點(cell)的數據值。
一,數據框的數據結構數據框(DataFrame)存儲的是二維數據,數據框的結構由row和column構成,每一行都有一個row label,每一列都有一個column label,把row和column稱作axis,把row label和column label稱作axis label。通常情況下,column label 是文本類型,是列名稱(column name),而row label是數值類型,也稱作行索引(row index)。
從DataFrame的結構圖中可以看出,DataFrame結構由二部分構成:深色的區域叫做Axis Label(軸标簽),淺灰色的區域是data,對于Axis,左側的軸稱作index、上方的軸稱作columns,而軸的結構實際上是一個Index類型。
import pandas as pd
In [2]: df = pd.DataFrame({
...: "Name": ["Braund",
...: "Allen",
...: "Bonnell"],
...: "Age": [22, 35, 58],
...: "Sex": ["male", "male", "female"]}
...: )
...:
In [3]: df
Out[3]:
Name Age Sex
0 Braund 22 male
1 Allen 35 male
2 Bonnell 58 female
該數據框(DataFrame) 有三行三列,行索引分别是0、1、2,列名稱分别是Name、Age和Sex。每一列的數據類型是相同的,對于Name和Sex列,它們的數據類型是文本,而Age列的數據類型是整數型。
二,序列的數據結構序列(Series)是一維結構,DataFrame的每一列都是一個序列(Series),序列結構隻有行索引(row index),沒有列名稱(column name),但是序列有Name、dtype和index屬性,其中Name屬性是指序列的名稱,dtype屬性是指序列值的類型,index屬性是序列的索引。序列存儲的數據的數據類型是相同的。
從序列的結構圖中,可以看出,實際上,序列包含數據(data)和索引(index)。左側是索引,右側是數據。
從DataFrame中選擇Age列,這是一個Series結構,
In [4]: df["Age"]
Out[4]:
0 22
1 35
2 58
Name: Age, dtype: int64
序列是由一組數據(各種NumPy數據類型),以及一組與之相關的行标簽(索引)組成,序列要求數據類型是相同的。
當然也可以創建一個新的序列,通過以下函數來創建一個新的序列:序列可以看作是一維數組:由于沒有顯式為Series指定索引,pandas會自動創建一個從0到length(Series)-1的整數型索引。
>>> cat=pd.Series(data=['a','b'],name='Category')
>>> cat
0 a
1 b
Name: Category, dtype: object
可以使用函數pandas.Series.rename() 來修改序列的name。
三,序列和數據框之間的關系序列和數據框之間的關系是:數據框的每一列都是一個序列,數據框的每一行都是一個序列。
數據框(DataFrame)是二維的數據結構,由一組有序的列構成,每列的數據類型是相同的,列與列之間的數據類型可以不相同。數據框的結構是行和列,每一列都有列名(或叫做列索引、列标簽),每一行都有行索引,行索引通常是正整數,也可以是文本類型。
序列和數據框之間是密切關聯的,當訪問DataFrame的一行時,pandas自動把該行轉換為序列;當訪問DataFrame的一列時,Pandas也自動把該列轉換為序列。
四,軸标簽存儲軸标簽的數據結構是Index,對于數據框,行标簽(即行索引)和列名稱(即列索引)是由Index對象存儲的;對于序列,行索引是由Index對象存儲的。索引對象是不可修改的,類似一個固定大小的數組。
對于索引,還可以通過序号來訪問,序号是自動生成的,從0開始。
軸标簽的最重要的作用是:
數據框和序列對象都有一個屬性index,用于獲取行标簽,對于數據框,還有一個columns屬性,用于獲取列标簽:
>>> df.index
RangeIndex(start=0, stop=3, step=1)
>>>df.columns
Index(['Name', 'Age', 'Sex'], dtype='object')
在大多數情況下,pandas使用NumPy的數組和dtypes作為序列和數據框中列的數據類型,NumPy支持的數據類型是float、int、bool、timedelta64[ns]。pandas擴展了NumPy的類型系統,用dtype屬性來顯示元素的數據類型,pandas主要有以下幾種dtype:
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還有類型轉換的特殊函數,用于轉換為特定的數據類型:
比如,把序列轉換為日期類型:
>>> 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]
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!