tft每日頭條

 > 科技

 > pandas的主要數據結構有

pandas的主要數據結構有

科技 更新时间:2024-10-08 02:45:14

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)。

pandas的主要數據結構有(pandas學習第1篇)1

從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屬性是序列的索引。序列存儲的數據的數據類型是相同的。

pandas的主要數據結構有(pandas學習第1篇)2

從序列的結構圖中,可以看出,實際上,序列包含數據(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:

  • 字符串類型: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]

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved