中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pandas怎么通過index選擇并獲取行和列

發布時間:2023-02-23 16:03:16 來源:億速云 閱讀:221 作者:iii 欄目:開發技術

本篇內容主要講解“Pandas怎么通過index選擇并獲取行和列”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Pandas怎么通過index選擇并獲取行和列”吧!

通過指定pandas.DataFrame和pandas.Series的index(下標),可以選擇和獲取行/列或元素的值。根據[]中指定的值的類型,可以獲取的數據會有所不同。

將描述以下內容。

獲取pandas.DataFrame的列

  • 列名稱:將單個列作為pandas.Series獲得

  • 列名稱的列表:將單個或多個列作為pandas.DataFrame獲得

獲取pandas.DataFrame的行

  • 行名?行號的切片:將單行或多行作為pandas.DataFrame獲得

獲取pandas.Series的值

  • 標簽名稱:獲取每種類型的單個元素的值

  • 標簽名稱/編號列表:將單個或多個元素的值作為pandas.Series獲得

  • 標簽名稱/數字切片:將單個元素或多個元素的值作為pandas.Series獲得

獲取pandas.DataFrame元素的值
行名/列名是整數值時的注意事項

在pandas.DataFrame的情況下,如果您不習慣該規范,則會感到困惑,例如,獲取列作為列表,獲取行作為切片。通過使用at,iat,loc和iloc,可以更清楚地選擇范圍。您還可以使用pandas.DataFrame,切片列提取元素值,并按行名/行號或列表選擇行。

請參閱以下文章。

Pandas獲取和修改任意位置的值(at,iat,loc,iloc)

在此示例代碼中,read_csv讀取并使用以下csv數據。

import pandas as pd

df = pd.read_csv('./data/28/sample_pandas_normal.csv', index_col=0)
print(df)
#          age state  point
# name
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

還可以使用set_index()將現有的DataFrame列指定為索引。

Pandas.DataFrame,重置列的行名(set_index)

獲取pandas.DataFrame的列

列名稱:將單個列作為pandas.Series獲得

如果僅在[]中指定列名(列標簽),則將提取所選列并將其作為pandas.Series獲取。

print(df['age'])
print(type(df['age']))
# name
# Alice      24
# Bob        42
# Charlie    18
# Dave       68
# Ellen      24
# Frank      30
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

print(df.age)
print(type(df.age))
# name
# Alice      24
# Bob        42
# Charlie    18
# Dave       68
# Ellen      24
# Frank      30
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

列名稱的列表:將單個或多個列作為pandas.DataFrame獲得

如果指定列名列表,則將提取選定的多個列并將其檢索為pandas.DataFrame。

print(df[['age', 'point']])
print(type(df[['age', 'point']]))
#          age  point
# name               
# Alice     24     64
# Bob       42     92
# Charlie   18     70
# Dave      68     70
# Ellen     24     88
# Frank     30     57
# <class 'pandas.core.frame.DataFrame'>

即使在具有一個元素的列表的情況下,它也成為pandas.DataFrame的一列。不是pandas.Series。

print(df[['age']])
print(type(df[['age']]))
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30
# <class 'pandas.core.frame.DataFrame'>

如果是切片,它將是一個空的pandas.DataFrame。因為切片被視為行規范(請參見下文)。

print(df['age':'point'])
# Empty DataFrame
# Columns: [age, state, point]
# Index: []

也可以使用loc進行列切片。另外,如果使用iloc,則可以按列號而不是列名(列標簽)指定。有關詳細信息,請參見以下文章。

Pandas獲取和修改任意位置的值(at,iat,loc,iloc

print(df.loc[:, 'age':'point'])
print(type(df.loc[:, 'age':'point']))
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57
# <class 'pandas.core.frame.DataFrame'>

print(df.iloc[:, [0, 2]])
print(type(df.iloc[:, [0, 2]]))
#          age  point
# name               
# Alice     24     64
# Bob       42     92
# Charlie   18     70
# Dave      68     70
# Ellen     24     88
# Frank     30     57
# <class 'pandas.core.frame.DataFrame'>

獲取pandas.DataFrame的行

行名?行號的切片:將單行或多行作為pandas.DataFrame獲得

如果在[]中指定切片,則可以提取并獲取相應范圍內的多行作為pandas.DataFrame。

print(df[1:4])
print(type(df[1:4]))
#          age state  point
# name                     
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# <class 'pandas.core.frame.DataFrame'>

可以指定一個負值或指定一個步驟,例如start:stop:step。您可以提取并獲得奇數或偶數行。

print(df[:-3])
print(type(df[1:-3]))
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# <class 'pandas.core.frame.DataFrame'>

print(df[::2])
print(type(df[::2]))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88
# <class 'pandas.core.frame.DataFrame'>

print(df[1::2])
print(type(df[1::2]))
#        age state  point
# name                   
# Bob     42    CA     92
# Dave    68    TX     70
# Frank   30    NY     57
# <class 'pandas.core.frame.DataFrame'>

如果它不是切片,則它是無用的;如果直接指定行號,則會發生錯誤。

# print(df[1])
# KeyError: 1

即使只選擇了一行,您也可以獲得pandas.DataFrame。它不會成為pandas.Series。

print(df[1:2])
print(type(df[1:2]))
#       age state  point
# name                  
# Bob    42    CA     92
# <class 'pandas.core.frame.DataFrame'>

print(df['Bob':'Ellen'])
print(type(df['Bob':'Ellen']))
#          age state  point
# name                     
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# <class 'pandas.core.frame.DataFrame'>

如果使用loc或iloc,則可以為一行單獨指定行名和行號,并將其獲取為pandas.Series,也可以在列表中選擇多行。

print(df.loc['Bob'])
print(type(df.loc['Bob']))
# age      42
# state    CA
# point    92
# Name: Bob, dtype: object
# <class 'pandas.core.series.Series'>

print(df.loc[['Bob', 'Ellen']])
print(type(df.loc[['Bob', 'Ellen']]))
#        age state  point
# name                   
# Bob     42    CA     92
# Ellen   24    CA     88
# <class 'pandas.core.frame.DataFrame'>

print(df.iloc[[1, 4]])
print(type(df.iloc[[1, 4]]))
#        age state  point
# name                   
# Bob     42    CA     92
# Ellen   24    CA     88
# <class 'pandas.core.frame.DataFrame'>

獲取pandas.Series的值

以以下pandas.Series為例。

s = df['age']
print(s)
# name
# Alice      24
# Bob        42
# Charlie    18
# Dave       68
# Ellen      24
# Frank      30
# Name: age, dtype: int64

標簽名稱:獲取每種類型的單個元素的值

如果標簽名稱/編號是獨立指定的,則可以按原樣獲得該值。如果是數字,則可以從末尾開始使用負值指定位置。 -1是結尾(最后一個)。

也可以在后面指定標簽名稱,就像pandas.DataFrame的列名稱規范一樣。但是,請注意,如果列名與現有方法名或屬性名重疊,則將優先使用。

print(s[3])
print(type(s[3]))
# 68
# <class 'numpy.int64'>

print(s['Dave'])
print(type(s['Dave']))
# 68
# <class 'numpy.int64'>

print(s[-1])
print(type(s[-1]))
# 30
# <class 'numpy.int64'>

print(s.Dave)
print(type(s.Dave))
# 68
# <class 'numpy.int64'>

標簽名稱/編號列表:將單個或多個元素的值作為pandas.Series獲得
在列表的情況下,可以將多個選定的值作為pandas.Series獲得。

print(s[[1, 3]])
print(type(s[[1, 3]]))
# name
# Bob     42
# Dave    68
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

print(s[['Bob', 'Dave']])
print(type(s[['Bob', 'Dave']]))
# name
# Bob     42
# Dave    68
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

對于具有1個元素的列表,它是pandas.Series,具有1個元素,而不是元素本身。

print(s[[1]])
print(type(s[[1]]))
# name
# Bob    42
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

print(s[['Bob']])
print(type(s[['Bob']]))
# name
# Bob    42
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

標簽名稱/數字切片:將單個元素或多個元素的值作為pandas.Series獲得

在切片的情況下,可以將多個選定值作為pandas.Series獲得。如果是標簽名稱的一部分,則還會選擇停止線。

print(s[1:3])
print(type(s[1:3]))
# name
# Bob        42
# Charlie    18
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

print(s['Bob':'Dave'])
print(type(s['Bob':'Dave']))
# name
# Bob        42
# Charlie    18
# Dave       68
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

當選擇一個元件,它變得與pandas.Series一種元素。

print(s[1:2])
print(type(s[1:2]))
# name
# Bob    42
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

print(s['Bob':'Bob'])
print(type(s['Bob':'Bob']))
# name
# Bob    42
# Name: age, dtype: int64
# <class 'pandas.core.series.Series'>

獲取pandas.DataFrame元素的值

通過從pandas.DataFrame中提取pandas.Series,然后從該pandas.Series中選擇并獲取值,可以從pandas.DataFrame中獲取元素值。

print(df['age']['Alice'])
# 24

還可以組合切片和列表以提取任何范圍。

print(df['Bob':'Dave'][['age', 'point']])
#          age  point
# name               
# Bob       42     92
# Charlie   18     70
# Dave      68     70

但是,這種重復索引引用([&hellip;])的方法稱為鏈式索引,因此不建議使用,因為在為選擇分配值時可能發生SettingWithCopyWarning。 &hellip;

可以使用at,iat,loc和iloc一次指定行和列。這是優選的。

print(df.at['Alice', 'age'])
# 24

print(df.loc['Bob':'Dave', ['age', 'point']])
#          age  point
# name               
# Bob       42     92
# Charlie   18     70
# Dave      68     70

行名/列名是整數值時的注意事項

在到目前為止的示例中,行名/列名是字符串,但是當行名/列名是整數值時要小心。

以下面的pandas.DataFrame為例。

df = pd.DataFrame([[0, 10, 20], [30, 40, 50], [60, 70, 80]],
                  index=[2, 0, 1], columns=[1, 2, 0])
print(df)
#     1   2   0
# 2   0  10  20
# 0  30  40  50
# 1  60  70  80

在[標量值]和[列表]的情況下,指定的值被視為列名。

print(df[0])
# 2    20
# 0    50
# 1    80
# Name: 0, dtype: int64

print(df[[0, 2]])
#     0   2
# 2  20  10
# 0  50  40
# 1  80  70

對于“切片”,將指定的值視為行號,而不是行名。負值也可以使用。 打印(df [:2])

print(df[:2])
#     1   2   0
# 2   0  10  20
# 0  30  40  50

print(df[-2:])
#     1   2   0
# 0  30  40  50
# 1  60  70  80

使用loc(行名)iloc(行號)來明確指定它是行名還是行號。

print(df.loc[:2])
#    1   2   0
# 2  0  10  20

print(df.iloc[:2])
#     1   2   0
# 2   0  10  20
# 0  30  40  50

s = df[2]
print(s)
# 2    10
# 0    40
# 1    70
# Name: 2, dtype: int64

pandas.Series認為指定的值是標簽名稱而不是數字。

print(s[0])
# 40

使用at和iat可以清楚地指定標簽名稱或編號。 loc和iloc很好,但是at和iat更快。

print(s.at[0])
# 40

print(s.iat[0])
# 10

特別要注意的是,如果嘗試獲取最后一個值并嘗試獲取[-1],它將被視為對名為-1的標簽的值的選擇。確定,如果您使用iat。

# print(s[-1])
# KeyError: -1

print(s.iat[-1])
# 70

這樣,當行名和列名是整數值時,最好使用at,iat,loc和iloc以避免混淆。

到此,相信大家對“Pandas怎么通過index選擇并獲取行和列”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洛南县| 宜兰市| 庐江县| 白玉县| 长武县| 如东县| 庄河市| 夏邑县| 乐清市| 大安市| 繁峙县| 疏勒县| 巫溪县| 昌邑市| 崇明县| 福贡县| 长泰县| 临泽县| 洞口县| 阿勒泰市| 康乐县| 铜川市| 土默特右旗| 隆尧县| 当阳市| 应城市| 西平县| 华容县| 达州市| 沐川县| 甘泉县| 仁布县| 巴楚县| 凤山县| 南雄市| 沈丘县| 东乌珠穆沁旗| 南宫市| 德庆县| 沂源县| 化州市|