網(wǎng)站首頁(yè) 編程語言 正文
通過指定pandas.DataFrame和pandas.Series的index(下標(biāo)),可以選擇和獲取行/列或元素的值。根據(jù)[]中指定的值的類型,可以獲取的數(shù)據(jù)會(huì)有所不同。
將描述以下內(nèi)容。
獲取pandas.DataFrame的列
- 列名稱:將單個(gè)列作為pandas.Series獲得
- 列名稱的列表:將單個(gè)或多個(gè)列作為pandas.DataFrame獲得
獲取pandas.DataFrame的行
- 行名?行號(hào)的切片:將單行或多行作為pandas.DataFrame獲得
獲取pandas.Series的值
- 標(biāo)簽名稱:獲取每種類型的單個(gè)元素的值
- 標(biāo)簽名稱/編號(hào)列表:將單個(gè)或多個(gè)元素的值作為pandas.Series獲得
- 標(biāo)簽名稱/數(shù)字切片:將單個(gè)元素或多個(gè)元素的值作為pandas.Series獲得
獲取pandas.DataFrame元素的值
行名/列名是整數(shù)值時(shí)的注意事項(xiàng)
在pandas.DataFrame的情況下,如果您不習(xí)慣該規(guī)范,則會(huì)感到困惑,例如,獲取列作為列表,獲取行作為切片。通過使用at,iat,loc和iloc,可以更清楚地選擇范圍。您還可以使用pandas.DataFrame,切片列提取元素值,并按行名/行號(hào)或列表選擇行。
請(qǐng)參閱以下文章。
Pandas獲取和修改任意位置的值(at,iat,loc,iloc)
在此示例代碼中,read_csv讀取并使用以下csv數(shù)據(jù)。
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()將現(xiàn)有的DataFrame列指定為索引。
Pandas.DataFrame,重置列的行名(set_index)
獲取pandas.DataFrame的列
列名稱:將單個(gè)列作為pandas.Series獲得
如果僅在[]中指定列名(列標(biāo)簽),則將提取所選列并將其作為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'>
列名稱的列表:將單個(gè)或多個(gè)列作為pandas.DataFrame獲得
如果指定列名列表,則將提取選定的多個(gè)列并將其檢索為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'>
即使在具有一個(gè)元素的列表的情況下,它也成為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'>
如果是切片,它將是一個(gè)空的pandas.DataFrame。因?yàn)榍衅灰暈樾幸?guī)范(請(qǐng)參見下文)。
print(df['age':'point'])
# Empty DataFrame
# Columns: [age, state, point]
# Index: []
也可以使用loc進(jìn)行列切片。另外,如果使用iloc,則可以按列號(hào)而不是列名(列標(biāo)簽)指定。有關(guān)詳細(xì)信息,請(qǐng)參見以下文章。
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的行
行名?行號(hào)的切片:將單行或多行作為pandas.DataFrame獲得
如果在[]中指定切片,則可以提取并獲取相應(yīng)范圍內(nèi)的多行作為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'>
可以指定一個(gè)負(fù)值或指定一個(gè)步驟,例如start:stop:step。您可以提取并獲得奇數(shù)或偶數(shù)行。
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'>
如果它不是切片,則它是無用的;如果直接指定行號(hào),則會(huì)發(fā)生錯(cuò)誤。
# print(df[1])
# KeyError: 1
即使只選擇了一行,您也可以獲得pandas.DataFrame。它不會(huì)成為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,則可以為一行單獨(dú)指定行名和行號(hào),并將其獲取為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
標(biāo)簽名稱:獲取每種類型的單個(gè)元素的值
如果標(biāo)簽名稱/編號(hào)是獨(dú)立指定的,則可以按原樣獲得該值。如果是數(shù)字,則可以從末尾開始使用負(fù)值指定位置。 -1是結(jié)尾(最后一個(gè))。
也可以在后面指定標(biāo)簽名稱,就像pandas.DataFrame的列名稱規(guī)范一樣。但是,請(qǐng)注意,如果列名與現(xiàn)有方法名或?qū)傩悦丿B,則將優(yōu)先使用。
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'>
標(biāo)簽名稱/編號(hào)列表:將單個(gè)或多個(gè)元素的值作為pandas.Series獲得
在列表的情況下,可以將多個(gè)選定的值作為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'>
對(duì)于具有1個(gè)元素的列表,它是pandas.Series,具有1個(gè)元素,而不是元素本身。
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'>
標(biāo)簽名稱/數(shù)字切片:將單個(gè)元素或多個(gè)元素的值作為pandas.Series獲得
在切片的情況下,可以將多個(gè)選定值作為pandas.Series獲得。如果是標(biāo)簽名稱的一部分,則還會(huì)選擇停止線。
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'>
當(dāng)選擇一個(gè)元件,它變得與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
但是,這種重復(fù)索引引用([…])的方法稱為鏈?zhǔn)剿饕虼瞬唤ㄗh使用,因?yàn)樵跒檫x擇分配值時(shí)可能發(fā)生SettingWithCopyWarning。 …
可以使用at,iat,loc和iloc一次指定行和列。這是優(yōu)選的。
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
行名/列名是整數(shù)值時(shí)的注意事項(xiàng)
在到目前為止的示例中,行名/列名是字符串,但是當(dāng)行名/列名是整數(shù)值時(shí)要小心。
以下面的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
在[標(biāo)量值]和[列表]的情況下,指定的值被視為列名。
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
對(duì)于“切片”,將指定的值視為行號(hào),而不是行名。負(fù)值也可以使用。 打印(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(行號(hào))來明確指定它是行名還是行號(hào)。
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認(rèn)為指定的值是標(biāo)簽名稱而不是數(shù)字。
print(s[0])
# 40
使用at和iat可以清楚地指定標(biāo)簽名稱或編號(hào)。 loc和iloc很好,但是at和iat更快。
print(s.at[0])
# 40
print(s.iat[0])
# 10
特別要注意的是,如果嘗試獲取最后一個(gè)值并嘗試獲取[-1],它將被視為對(duì)名為-1的標(biāo)簽的值的選擇。確定,如果您使用iat。
# print(s[-1])
# KeyError: -1
print(s.iat[-1])
# 70
這樣,當(dāng)行名和列名是整數(shù)值時(shí),最好使用at,iat,loc和iloc以避免混淆。
原文鏈接:https://blog.csdn.net/qq_18351157/article/details/109652320
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-07-11 Python中列表,元組,字典和集合的區(qū)別及它們之間的轉(zhuǎn)換_python
- 2022-09-23 win11下FTP服務(wù)器搭建圖文教程_FTP服務(wù)器
- 2023-12-07 com.fasterxml.jackson.databind.ObjectMapper
- 2022-01-21 win10 如何做到 C盤 的絕對(duì)干凈,所有軟件都安裝到D盤,C盤只用來存操作系統(tǒng)。
- 2022-06-19 C語言簡(jiǎn)明講解類型轉(zhuǎn)換的使用與作用_C 語言
- 2022-12-19 nginx?rewrite參數(shù)解析_nginx
- 2022-05-17 基于Python編寫簡(jiǎn)易文字語音轉(zhuǎn)換器_python
- 2023-04-26 Flask接口簽名sign原理與實(shí)例代碼淺析_python
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支