日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
快速認(rèn)識Pandas的十大索引

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

創(chuàng)新互聯(lián)公司是一家專業(yè)提供安慶企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為安慶眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

  • 一本書有自己的目錄和具體的章節(jié),當(dāng)我們想找某個(gè)知識點(diǎn),翻到對應(yīng)的章節(jié)即可;
  • 也像圖書館中的書籍被分類成文史類、技術(shù)類、小說類等,再加上書籍的編號,很快就能夠找到我們想要的書籍。
  • 外出吃飯點(diǎn)菜的菜單,從主食類、飲料/湯類、涼菜類等,到具體的菜名等,點(diǎn)個(gè)菜即可。

上面不同的場景都可以看做是一個(gè)具體的索引應(yīng)用:通過索引我們能夠快速定位數(shù)據(jù)。

因此,基于實(shí)際需求出發(fā)創(chuàng)建的索引對我們的業(yè)務(wù)工作具有很強(qiáng)的指導(dǎo)意義。在Pandas中創(chuàng)建合適的索引則能夠方便我們的數(shù)據(jù)處理工作。

官網(wǎng)學(xué)習(xí)地址:https://pandas.pydata.org/docs/reference/api/pandas.Index.html

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

pd.Index

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

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

導(dǎo)入兩個(gè)必需的庫:

import pandas as pd
import numpy as np

默認(rèn)的數(shù)據(jù)類型是int64

In [2]:

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

Out[2]:

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

在創(chuàng)建的時(shí)候,還能夠直接指定數(shù)據(jù)類型:

In [3]:

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

Out[3]:

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

在創(chuàng)建的時(shí)候指定名稱name和數(shù)據(jù)類型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函數(shù)生成列表來創(chuàng)建
pd.Index(list("ABCD"))

Out[5]:

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

使用元組來進(jìn)行創(chuàng)建:

In [6]:

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

Out[6]:

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

使用集合來進(jìn)行創(chuàng)建。集合本身是無序的,所以最終的結(jié)果并不一定是按照給定的元素順序:

In [7]:

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

Out[7]:

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

pd.RangeIndex

生成一個(gè)區(qū)間內(nèi)的索引,主要是基于Python的range函數(shù),其語法為:

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

下面通過多個(gè)例子來講解:

In [8]:

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

默認(rèn)結(jié)果中起始值是0,結(jié)束值是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))

將結(jié)果用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]  # 結(jié)果中不包含0

pd.Int64Index

指定數(shù)據(jù)類型是int64整型

pandas.Int64Index(
data=None, # 生成索引的數(shù)據(jù)
dtype=None, # 索引類型,默認(rèn)是int64
copy=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])  # 強(qiáng)制轉(zhuǎn)成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')

如果在數(shù)據(jù)中包含小數(shù)則會(huì)報(bào)錯(cuò):

In [17]:

# pd.Int64Index([1,2,3,4.4])  # 出現(xiàn)小數(shù)則報(bào)錯(cuò)

pd.UInt64Index

數(shù)據(jù)類型是無符號的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')
# 存在小數(shù)則報(bào)錯(cuò)
pd.UInt64Index([1, 2.4, 3, 4],name="Tom")

pd.Float64Index

數(shù)據(jù)類型是Float64位的浮點(diǎn)型,允許小數(shù)出現(xiàn):

pandas.Float64Index(
data=None, # 數(shù)據(jù)
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個(gè)函數(shù)全部統(tǒng)一成了pd.NumericIndex方法。

pd.IntervalIndex

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

新的 IntervalIndex 通常使用??interval_range()??函數(shù)來進(jìn)行構(gòu)造,基本用法:

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', # 默認(rèn)情況下右邊是關(guān)閉的
dtype='interval[int64]')

In [25]:

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

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")  # 兩邊都關(guān)閉

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")  # 左邊關(guān)閉

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, # 數(shù)據(jù)
categories=None, # 分類的數(shù)據(jù)
ordered=None, # 是否排序
dtype=None, # 數(shù)據(jù)類型
copy=False, # 副本
name=None) # 名字

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

In [29]:

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

Out[29]:

CategoricalIndex(
# 數(shù)據(jù)
['S', 'M', 'L', 'XS', 'M', 'L', 'S', 'M', 'L', 'XL'],
# 出現(xiàn)的不同元素
categories=['L', 'M', 'S', 'XL', 'XS'],
# 默認(rèn)不排序
ordered=False,
# 數(shù)據(jù)類型
dtype='category'
)

In [30]:

c2 = pd.CategoricalIndex(
["S","M","L","XS","M","L","S","M","L","XL"],
# 指定分類的數(shù)據(jù)
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(
# 數(shù)據(jù)
["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, # 已經(jīng)排序
dtype='category')

In [32]:

c4 = pd.CategoricalIndex(
# 待排序的數(shù)據(jù)
["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() 方法進(jìn)行實(shí)例化得到:

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, # 默認(rèn)不排序
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

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

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

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

In [35]:

# 默認(rèn)天為頻率
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代表小時(shí)
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")

顯示的結(jié)果中以一個(gè)季度-3個(gè)月為頻率:

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]:

# 指定時(shí)區(qū)tz

pd.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是一個(gè)專門針對周期性數(shù)據(jù)的索引,方便針對具有一定周期的數(shù)據(jù)進(jìn)行處理,具體用法如下:

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

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

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函數(shù)先生成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, # 數(shù)據(jù)
unit=None, # 最小單元
freq=NoDefault.no_default, # 頻率
closed=None, # 指定關(guān)閉的位置
dtype=dtype(' copy=False, # 副本
name=None # 名字
)

創(chuàng)建方式1:指定數(shù)據(jù)和最小單元

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') # 按小時(shí)

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]', # 數(shù)據(jù)類型
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)

創(chuàng)建方式2:通過timedelta_range函數(shù)來間接生成

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]:


本文標(biāo)題:快速認(rèn)識Pandas的十大索引
URL網(wǎng)址:http://www.dlmjj.cn/article/dpsoijj.html