日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】快速认识Pandas的10大索引

發布時間:2025/3/12 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】快速认识Pandas的10大索引 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

公眾號:尤而小屋
作者:Peter
編輯:Peter

今天給大家帶來一篇關于Pandas索引的文章:10種你必須掌握的Pandas索引

索引在我們的日常生活中其實是很常見的,就像:

  • 一本書有自己的目錄和具體的章節,當我們想找某個知識點,翻到對應的章節即可;

  • 也像圖書館中的書籍被分類成文史類、技術類、小說類等,再加上書籍的編號,很快就能夠找到我們想要的書籍。

  • 外出吃飯點菜的菜單,從主食類、飲料/湯類、涼菜類等,到具體的菜名等,點個菜即可。

上面不同的場景都可以看做是一個具體的索引應用:通過索引我們能夠快速定位數據。

因此,基于實際需求出發創建的索引對我們的業務工作具有很強的指導意義。在Pandas中創建合適的索引則能夠方便我們的數據處理工作。

官網學習地址:https://pandas.pydata.org/docs/reference/api/pandas.Index.html

下面通過實際案例來介紹Pandas中常見的10種索引,以及如何創建它們。

pd.Index

Index是Pandas中的常見索引函數,通過它能夠構建各種類型的索引,其語法為:

pandas.Index(data=None,?#?一維數組或者類似數組結構的數據dtype=None,??# NumPy數據類型(默認值:對象)copy=False,??#?是否生成副本name=None,?#??索引名字tupleize_cols=True,??#?如果為True,則盡可能嘗試創建?MultiIndex**kwargs )

導入兩個必需的庫:

import?pandas?as?pd import?numpy?as?np

默認的數據類型是int64

In [2]:

#?通過列表來創建 pd.Index([1,2,3,4])

Out[2]:

Int64Index([1,?2,?3,?4],?dtype='int64')

在創建的時候,還能夠直接指定數據類型:

In [3]:

#?指定索引的數據類型 pd.Index([1,2,3,4],?dtype="float64")

Out[3]:

Float64Index([1.0,?2.0,?3.0,?4.0],?dtype='float64')

在創建的時候指定名稱name和數據類型dtype:

In [4]:

#?指定類型和名稱 pd.Index([1,2,3,4],?dtype="float64",name="Peter")

Out[4]:

Float64Index([1.0,?2.0,?3.0,?4.0],?dtype='float64',?name='Peter')

In [5]:

#?使用list函數生成列表來創建 pd.Index(list("ABCD"))

Out[5]:

Index(['A',?'B',?'C',?'D'],?dtype='object')

使用元組來進行創建:

In [6]:

#?使用元組來創建 pd.Index(("a","b","c","d"))

Out[6]:

Index(['a',?'b',?'c',?'d'],?dtype='object')

使用集合來進行創建。集合本身是無序的,所以最終的結果并不一定是按照給定的元素順序:

In [7]:

#?使用集合來創建,集合本身是無序的 pd.Index({"x","y","z"})

Out[7]:

Index(['z',?'x',?'y'],?dtype='object')

pd.RangeIndex

生成一個區間內的索引,主要是基于Python的range函數,其語法為:

pandas.RangeIndex(start=None,??#?起始值,默認為0stop=None,??#?終止值step=None,??#?步長,默認為1dtype=None,??#?類型copy=False,??#?是否生成副本name=None)??#?名稱

下面通過多個例子來講解:

In [8]:

pd.RangeIndex(8)??#?默認start是0,步長是1

默認結果中起始值是0,結束值是8(不包含),步長是1:

Out[8]:

RangeIndex(start=0,?stop=8,?step=1)

In [9]:

pd.RangeIndex(0,8)??#?指定start和stop

Out[9]:

RangeIndex(start=0,?stop=8,?step=1)

改變步長為2:

In [10]:

pd.RangeIndex(0,8,2)

Out[10]:

RangeIndex(start=0,?stop=8,?step=2)

In [11]:

list(pd.RangeIndex(0,8,2))

將結果用list顯示出來,沒有包含stop的值8:

Out[11]:

[0,?2,?4,?6]

下面的案例中將步長改成-1:

In [12]:

pd.RangeIndex(8,0,-1)

Out[12]:

RangeIndex(start=8,?stop=0,?step=-1)

In [13]:

list(pd.RangeIndex(8,0,-1))

Out[13]:

[8,?7,?6,?5,?4,?3,?2,?1]??#?結果中不包含0

pd.Int64Index

指定數據類型是int64整型

pandas.Int64Index(data=None,??#?生成索引的數據dtype=None,??#?索引類型,默認是int64copy=False,??#?是否生成副本name=None)??#?使用名稱

In [14]:

pd.Int64Index([1,2,3,4])

Out[14]:

Int64Index([1,?2,?3,?4],?dtype='int64')

In [15]:

pd.Int64Index([1,2.0,3,4])??#?強制轉成int64類型

Out[15]:

Int64Index([1,?2,?3,?4],?dtype='int64')

In [16]:

pd.Int64Index([1,2,3,4],name="Peter")

Out[16]:

Int64Index([1,?2,?3,?4],?dtype='int64',?name='Peter')

如果在數據中包含小數則會報錯:

In [17]:

#?pd.Int64Index([1,2,3,4.4])??#?出現小數則報錯

pd.UInt64Index

數據類型是無符號的UInt64

pandas.UInt64Index(data=None,?dtype=None,?copy=False,?name=None )

In [18]:

pd.UInt64Index([1,?2,?3,?4])

Out[18]:

UInt64Index([1,?2,?3,?4],?dtype='uint64')

In [19]:

pd.UInt64Index([1,?2,?3,?4],name="Tom")??#?指定名字

Out[19]:

UInt64Index([1,?2,?3,?4],?dtype='uint64',?name='Tom')

In [20]:

pd.UInt64Index([1,?2.0,?3,?4],name="Tom")

Out[20]:

UInt64Index([1,?2,?3,?4],?dtype='uint64',?name='Tom')#?存在小數則報錯 pd.UInt64Index([1,?2.4,?3,?4],name="Tom")

pd.Float64Index

數據類型是Float64位的浮點型,允許小數出現:

pandas.Float64Index(data=None,??#?數據dtype=None,??#?類型copy=False,??#?是否生成副本name=None??#?索引名字 )

In [22]:

pd.Float64Index([1,?2,?3,?4])

Out[22]:

Float64Index([1.0,?2.0,?3.0,?4.0],?dtype='float64')

In [23]:

pd.Float64Index([1.5,?2.4,?3.7,?4.9])

Out[23]:

Float64Index([1.5,?2.4,?3.7,?4.9],?dtype='float64')

In [24]:

pd.Float64Index([1.5,?2.4,?3.7,?4.9],name="peter")

Out[24]:

Float64Index([1.5,?2.4,?3.7,?4.9],?dtype='float64',?name='peter')

注意:在Pandas1.4.0的版本中,上面3個函數全部統一成了pd.NumericIndex方法

pd.IntervalIndex

pd.IntervalIndex(data,??#?待生成索引的數據(一維)closed=None,??#?區間的哪邊是關閉狀態,{‘left’,?‘right’,?‘both’,?‘neither’},?default?‘right’dtype=None,??#?數據類型copy=False,??#??生成副本name=None,??#?索引的名字verify_integrity=True??#?判斷是否符合 )

新的 IntervalIndex 通常使用interval_range()函數來進行構造,基本用法:

In [24]:

pd.interval_range(start=0,?end=6)

Out[24]:

IntervalIndex([(0,?1],?(1,?2],?(2,?3],?(3,?4],?(4,?5],?(5,?6]],closed='right',??#?默認情況下右邊是關閉的dtype='interval[int64]')

In [25]:

pd.interval_range(start=0,?end=6,?closed="neither")??#?兩邊都不關閉

Out[25]:

IntervalIndex([(0,?1),?(1,?2),?(2,?3),?(3,?4),?(4,?5),?(5,?6)],closed='neither',dtype='interval[int64]')

In [26]:

pd.interval_range(start=0,?end=6,?closed="both")??#?兩邊都關閉

Out[26]:

IntervalIndex([[0,?1],?[1,?2],?[2,?3],?[3,?4],?[4,?5],?[5,?6]],closed='both',dtype='interval[int64]')

In [27]:

pd.interval_range(start=0,?end=6,?closed="left")??#?左邊關閉

Out[27]:

IntervalIndex([[0,?1),?[1,?2),?[2,?3),?[3,?4),?[4,?5),?[5,?6)],closed='left',dtype='interval[int64]')

In [28]:

pd.interval_range(start=0,?end=6,?name="peter")

Out[28]:

IntervalIndex([(0,?1],?(1,?2],?(2,?3],?(3,?4],?(4,?5],?(5,?6]],closed='right',name='peter',dtype='interval[int64]')

pd.CategoricalIndex

pandas.CategoricalIndex(data=None,???#?數據categories=None,??#?分類的數據ordered=None,??#?是否排序dtype=None,???#?數據類型copy=False,???#?副本name=None)??#?名字

在下面的例子中我們以一批衣服的尺碼作為模擬數據:

In [29]:

#?指定數據 c1?=?pd.CategoricalIndex(["S","M","L","XS","M","L","S","M","L","XL"]) c1

Out[29]:

CategoricalIndex(#?數據['S',?'M',?'L',?'XS',?'M',?'L',?'S',?'M',?'L',?'XL'],?#?出現的不同元素categories=['L',?'M',?'S',?'XL',?'XS'],??#?默認不排序?ordered=False,#?數據類型dtype='category')

In [30]:

c2?=?pd.CategoricalIndex(["S","M","L","XS","M","L","S","M","L","XL"],#?指定分類的數據categories=["XS","S","M","L","XL"] )c2

Out[30]:

CategoricalIndex(['S',?'M',?'L',?'XS',?'M',?'L',?'S',?'M',?'L',?'XL'],?categories=['XS',?'S',?'M',?'L',?'XL'],?ordered=False,?dtype='category')

In [31]:

c3?=?pd.CategoricalIndex(#?數據["S","M","L","XS","M","L","S","M","L","XL"],#?分類名字categories=["XS","S","M","L","XL"],#?確定排序ordered=True )c3

Out[31]:

CategoricalIndex(['S',?'M',?'L',?'XS',?'M',?'L',?'S',?'M',?'L',?'XL'],?categories=['XS',?'S',?'M',?'L',?'XL'],?ordered=True,??#?已經排序dtype='category')

In [32]:

c4?=?pd.CategoricalIndex(#?待排序的數據["S","M","L","XS","M","L","S","M","L","XL"],#?指定分類順序categories=["XS","S","M","L","XL"],#?排序ordered=True,#?索引名字name="category" )c4

Out[32]:

CategoricalIndex(['S',?'M',?'L',?'XS',?'M',?'L',?'S',?'M',?'L',?'XL'],?categories=['XS',?'S',?'M',?'L',?'XL'],?ordered=True,?name='category',?dtype='category')

CategoricalIndex 索引對象也可以從 Categorical() 方法進行實例化得到:

In [33]:

c5?=?pd.Categorical(["a",?"b",?"c",?"c",?"b",?"c",?"a"])pd.CategoricalIndex(c5)

Out[33]:

CategoricalIndex(['a',?'b',?'c',?'c',?'b',?'c',?'a'],?categories=['a',?'b',?'c'],?ordered=False,??#?默認不排序dtype='category')

In [34]:

pd.CategoricalIndex(c5,?ordered=True)??#?指定排序

Out[34]:

CategoricalIndex(['a',?'b',?'c',?'c',?'b',?'c',?'a'],?categories=['a',?'b',?'c'],?ordered=True,?#?排序dtype='category')

pd.DatetimeIndex

以時間和日期作為索引,通過date_range函數來生成,具體語法為:

pd.DatetimeIndex(data=None,??#?數據freq=NoDefault.no_default,??#?頻率tz=None,??#??時區normalize=False,??#?是否歸一化?closed=None,??#?區間是否關閉#?‘infer’,?bool-ndarray,?‘NaT’,?默認‘raise’ambiguous='raise',??dayfirst=False,??#?第一天yearfirst=False,??#?第一年dtype=None,??#?數據類型copy=False,??#?副本name=None??#?名字 )

以時間和日期作為索引,通過date_range函數來生成,具體例子為:

In [35]:

#?默認天為頻率 pd.date_range("2022-01-01",periods=6)

Out[35]:

DatetimeIndex(['2022-01-01',?'2022-01-02',?'2022-01-03',?'2022-01-04','2022-01-05',?'2022-01-06'],dtype='datetime64[ns]',?freq='D'??#?頻率)

In [36]:

#?日期作為索引,D代表天 d1?=?pd.date_range( "2022-01-01", periods=6,? freq="D") d1

Out[36]:

DatetimeIndex(['2022-01-01',?'2022-01-02',?'2022-01-03',?'2022-01-04','2022-01-05',?'2022-01-06'],dtype='datetime64[ns]',?freq='D')

In [37]:

#?H代表小時 pd.date_range("2022-01-01",periods=6,?freq="H")

Out[37]:

DatetimeIndex(['2022-01-01?00:00:00',?'2022-01-01?01:00:00','2022-01-01?02:00:00',?'2022-01-01?03:00:00','2022-01-01?04:00:00',?'2022-01-01?05:00:00'],dtype='datetime64[ns]',?freq='H')

In [38]:

#?M代表月 pd.date_range("2022-01-01",periods=6,?freq="3M")

Out[38]:

DatetimeIndex(['2022-01-31',?'2022-04-30',?'2022-07-31','2022-10-31','2023-01-31',?'2023-04-30'],dtype='datetime64[ns]',?freq='3M')

In [39]:

#?Q代表季度pd.date_range("2022-01-01",periods=6,?freq="Q")

顯示的結果中以一個季度-3個月為頻率:

Out[39]:

DatetimeIndex(['2022-03-31',?'2022-06-30',?'2022-09-30','2022-12-31','2023-03-31',?'2023-06-30'],dtype='datetime64[ns]',?freq='Q-DEC')

In [40]:

#?指定時區tzpd.date_range("2022-01-01",periods=6,?tz="Asia/Calcutta")

Out[40]:

DatetimeIndex(['2022-01-01?00:00:00+05:30',?'2022-01-02?00:00:00+05:30','2022-01-03?00:00:00+05:30',?'2022-01-04?00:00:00+05:30','2022-01-05?00:00:00+05:30',?'2022-01-06?00:00:00+05:30'],dtype='datetime64[ns,?Asia/Calcutta]',?freq='D')

pd.PeriodIndex

pd.PeriodIndex是一個專門針對周期性數據的索引,方便針對具有一定周期的數據進行處理,具體用法如下:

pd.PeriodIndex(data=None,??#?數據ordinal=None,??#?序數freq=None,??#?頻率dtype=None,??#?數據類型copy=False,??#?副本name=None,??#?名字**fields )

生成pd.PeriodIndex對象的方式1:指定開始時間、周期頻率

In [41]:

pd.period_range('2022-01-01?09:00',?periods=5,?freq='H')

Out[41]:

PeriodIndex( ['2022-01-01?09:00',?'2022-01-01?10:00',? '2022-01-01?11:00','2022-01-01?12:00',?'2022-01-01?13:00'], dtype='period[H]',?freq='H')

In [42]:

pd.period_range('2022-01-01?09:00',?periods=6,?freq='2D')

Out[42]:

PeriodIndex( ['2022-01-01',?'2022-01-03',? '2022-01-05',?'2022-01-07', '2022-01-09',?'2022-01-11'], dtype='period[2D]',? freq='2D')

In [43]:

pd.period_range('2022-01',?periods=5,?freq='M')

Out[43]:

PeriodIndex( ['2022-01',?'2022-02',? '2022-03',?'2022-04',?'2022-05'],? dtype='period[M]',?freq='M')

In [44]:

p1?=?pd.DataFrame({"name":["xiaoming","xiaohong","Peter","Mike","Jimmy"]},#?指定索引index=pd.period_range('2022-01-01?09:00',?periods=5,?freq='3H') )p1

生成pd.PeriodIndex對象的方式2:直接使用pd.PeriodIndex方法

In [45]:

pd.PeriodIndex( ['2022-01-01',?'2022-01-02',? '2022-01-03',?'2022-01-04'],? freq?=?'2H')

Out[45]:

PeriodIndex( ['2022-01-01?00:00',?'2022-01-02?00:00',? '2022-01-03?00:00','2022-01-04?00:00'], dtype='period[2H]',?freq='2H')

In [46]:

pd.PeriodIndex( ['2022-01',?'2022-02',? '2022-03',?'2022-04'],? freq?=?'M')

Out[46]:

PeriodIndex( ['2022-01',?'2022-02',? '2022-03',?'2022-04'],? dtype='period[M]',? freq='M')

In [47]:

pd.PeriodIndex(['2022-01',?'2022-07'],?freq?=?'Q')

Out[47]:

PeriodIndex( ['2022Q1',?'2022Q3'],? dtype='period[Q-DEC]',? freq='Q-DEC')

生成pd.PeriodIndex對象的方式3:利用date_range函數先生成DatetimeIndex對象

In [48]:

data?=?pd.date_range("2022-01-01",periods=6) data

Out[48]:

DatetimeIndex( ['2022-01-01',?'2022-01-02',? '2022-01-03',?'2022-01-04', '2022-01-05',?'2022-01-06'], dtype='datetime64[ns]',? freq='D')

In [49]:

pd.PeriodIndex(data=data)

Out[49]:

PeriodIndex( ['2022-01-01',?'2022-01-02',? '2022-01-03',?'2022-01-04', '2022-01-05',?'2022-01-06'], dtype='period[D]',?freq='D')

In [50]:

p2?=?pd.DataFrame(np.random.randn(400,?1),columns=['number'],#?指定索引index=pd.period_range('2021-01-01?8:00',periods=400,freq='D')) p2

pd.TimedeltaIndex

pd.TimedeltaIndex(data=None,??#?數據unit=None,??#?最小單元freq=NoDefault.no_default,??#?頻率?closed=None,??#?指定關閉的位置dtype=dtype('<m8[ns]'),??#?數據類型copy=False,??#?副本name=None??#?名字 )

創建方式1:指定數據和最小單元

In [51]:

pd.TimedeltaIndex([12,?24,?36,?48],?unit='s')

Out[51]:

TimedeltaIndex(['0?days?00:00:12',?'0?days?00:00:24',?'0?days?00:00:36','0?days?00:00:48'],dtype='timedelta64[ns]',?freq=None)

In [52]:

pd.TimedeltaIndex([1,?2,?3,?4],?unit='h')?#?按小時

Out[52]:

TimedeltaIndex(['0?days?01:00:00',?'0?days?02:00:00',?'0?days?03:00:00','0?days?04:00:00'],dtype='timedelta64[ns]',?freq=None)

In [53]:

pd.TimedeltaIndex([12,?24,?36,?48],?unit='h')

Out[53]:

TimedeltaIndex(['0?days?12:00:00',?'1?days?00:00:00',?'1?days?12:00:00','2?days?00:00:00'],dtype='timedelta64[ns]',?#?數據類型freq=None)

In [54]:

pd.TimedeltaIndex([12,?24,?36,?48],?unit='D')

Out[54]:

TimedeltaIndex(['12?days',?'24?days',?'36?days',?'48?days'],?dtype='timedelta64[ns]',?freq=None)

創建方式2:通過timedelta_range函數來間接生成

In [55]:

data1?=?pd.timedelta_range(start='1?day',?periods=4) data1

Out[55]:

TimedeltaIndex(['1?days',?'2?days',?'3?days',?'4?days'],?dtype='timedelta64[ns]',?freq='D')

In [56]:

pt1?=?pd.TimedeltaIndex(data1)pt1

Out[56]:

TimedeltaIndex(['1?days',?'2?days',?'3?days',?'4?days'],?dtype='timedelta64[ns]',?freq='D')

In [57]:

data2?=?pd.timedelta_range(start='1?day',?end='3?days',?freq='6H') data2

Out[57]:

TimedeltaIndex(['1?days?00:00:00',?'1?days?06:00:00',?'1?days?12:00:00','1?days?18:00:00',?'2?days?00:00:00',?'2?days?06:00:00','2?days?12:00:00',?'2?days?18:00:00',?'3?days?00:00:00'],dtype='timedelta64[ns]',?freq='6H')

In [58]:

pt2?=?pd.TimedeltaIndex(data2)pt2

Out[58]:

往期精彩回顧適合初學者入門人工智能的路線及資料下載(圖文+視頻)機器學習入門系列下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印《統計學習方法》的代碼復現專輯 AI基礎下載機器學習交流qq群955171419,加入微信群請掃碼:

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的【Python】快速认识Pandas的10大索引的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。