Pandas通过index选择并获取行和列

目录
  • 获取pandas.DataFrame的列
    • 列名称:将单个列作为pandas.Series获得
    • 列名称的列表:将单个或多个列作为pandas.DataFrame获得
  • 获取pandas.DataFrame的行
    • 行名・行号的切片:将单行或多行作为pandas.DataFrame获得
  • 获取pandas.Series的值
    • 标签名称:获取每种类型的单个元素的值
    • 标签名称/数字切片:将单个元素或多个元素的值作为pandas.Series获得
  • 获取pandas.DataFrame元素的值
    • 行名/列名是整数值时的注意事项

通过指定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

但是,这种重复索引引用([…])的方法称为链式索引,因此不建议使用,因为在为选择分配值时可能发生SettingWithCopyWarning。 …

可以使用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选择并获取行和列的文章就介绍到这了,更多相关Pandas index获取行和列内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Pandas.DataFrame时间序列数据处理的实现

    目录 如何将一列现有数据指定为DatetimeIndex 读取CSV时如何指定DatetimeIndex 关于pandas.Series 将pandas.DataFrame,pandas.Series的索引设置为datetime64 [ns]类型时,将其视为DatetimeIndex,并且可以使用各种处理时间序列数据的函数. 可以按年或月指定行,并按切片指定提取周期,这在处理包含日期和时间信息(例如日期和时间)的数据时非常方便. 在此,将对以下内容进行描述. 如何将一列现有数据指定为Dateti

  • Pandas merge合并两个DataFram的实现

    目录 Pandas merge 保留左边的DataFram Pandas merge pandas.merge()是pandas库中用于合并两个或多个DataFrame对象的函数,其常用的参数有以下几个: left:要合并的左侧DataFrame. right:要合并的右侧DataFrame. how:指定合并方式,包括‘left’.‘right’.‘outer’和‘inner’四种. on:指定按照哪些列进行合并,可以是单个列名或包含多个列名的列表. left_on和right_on:指定左侧

  • Pandas中MultiIndex选择并提取任何行和列

    目录 选择并提取带有loc的任何行或列 特殊切片规范:slice(),pd.IndexSlice [] xs方法 给选择赋值 使用多索引(分层索引)可以方便地对pandas.DataFrame和pandas.Series的索引进行分层配置,以便可以为每个层次结构计算统计信息,例如总数和平均值. 以下csv数据为例.每个索引列都命名为level_x. import pandas as pd df = pd.read_csv('./data/25/sample_multi.csv', index_c

  • pandas读取Excel批量转换时间戳的实践

    目录 一.安装 二. 代码如下 python将GPS时间戳批量转换为日期时间(年月日时分秒) 一.安装 pip install pandas 如果出报错,不能运行,可以安装 pip install xlrd 二. 代码如下 import pandas as pd import time,datetime file_path = r'C:\Users\Administrator\Desktop\携号转网测试\admin_log.xls' df = pd.read_excel(file_path,

  • pandas中按行或列的值对数据排序的实现

    目录 一. 按列的值对数据排序 1.按某一列的值对数据排序 2. 按多列的值对数据排序 3. key 参数:设置排序时的数据变换函数 4. 修改原数据 二. 按行的值对数据排序 参考 在处理表格型数据时,常会用到排序,比如,按某一行或列的值对表格排序,要怎么做呢? 这就要用到 pandas 中的 sort_values() 函数. 一. 按列的值对数据排序 先来看最常见的情况. 1.按某一列的值对数据排序 以下面的数据为例. import pandas as pd df_col = pd.Dat

  • pandas.DataFrame中提取特定类型dtype的列

    目录 select_dtypes()的基本用法 指定要提取的类型:参数include 指定要排除的类型:参数exclude pandas.DataFrame为每一列保存一个数据类型dtype. 要仅提取(选择)特定数据类型为dtype的列,请使用pandas.DataFrame的select_dtypes()方法. 以带有各种数据类型的列的pandas.DataFrame为例. import pandas as pd df = pd.DataFrame({'a': [1, 2, 1, 3],  

  • 针对Pandas的总结以及数据读取_pd.read_csv()的使用详解

    目录 1. FilePathOrBuffer 2. sep 3. delim_whitespace(不常用) 4. header 和 names 5. index_col 6. usecols 7. mangle_dupe_cols 8. prefix 9. dtype 10. engine 11. converters 12. true_values和false_value 13. skiprows 14. skipfooter 15. nrows 16. na_values 17. keep

  • Pandas通过index选择并获取行和列

    目录 获取pandas.DataFrame的列 列名称:将单个列作为pandas.Series获得 列名称的列表:将单个或多个列作为pandas.DataFrame获得 获取pandas.DataFrame的行 行名・行号的切片:将单行或多行作为pandas.DataFrame获得 获取pandas.Series的值 标签名称:获取每种类型的单个元素的值 标签名称/数字切片:将单个元素或多个元素的值作为pandas.Series获得 获取pandas.DataFrame元素的值 行名/列名是整数

  • 基于pandas向csv添加新的行和列

    首先创建一个csv文件,创建方式为新建一个文本文档,然后将这个文本文档重命名为test.csv 再用Excel打开,添加内容 内容如下: 先来添加列 data = ['a','b','c'] df['字母'] = data import pandas as pd filename = './test.csv' df = pd.read_csv(filename,encoding='gbk') data = ['a','b','c'] df['字母'] = data df.to_csv(filen

  • pandas行和列的获取的实现

    目录 1. 行和列的获取 1.1 根据索引获取行 1.2 根据条件获取行 1.3 获取列 2. 区域选取 2.1 df.loc[] 2.2 df.iloc[ ] 2.3 df.ix[ ] 3. 单元格选取 3.1 df.at[] 3.2 df.iat[] DataFrame的行和列:df[‘行’, ‘列’] DataFrame行和列的获取分三个维度 行和列选取:df[],一次只能选取行或列 区域选取:df.loc[], df.iloc[], df.ix[],可以同时为行或列设置筛选条件 单元格选

  • pandas 选取行和列数据的方法详解

    前言 本文介绍在 pandas 中如何读取数据行列的方法.数据由行和列组成,在数据库中,一般行被称作记录 (record),列被称作字段 (field).回顾一下我们对记录和字段的获取方式:一般情况下,字段根据名称获取,记录根据筛选条件获取.比如获取 student_id 和 studnent_name 两个字段:记录筛选,比如 sales_amount 大于 10000 的所有记录.对于熟悉 SQL 语句的人来说,就是下面的语句: select student_id, student_name

  • python pandas库中DataFrame对行和列的操作实例讲解

    用pandas中的DataFrame时选取行或列: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.arange(3.)) data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w'] #选择表格中的'w'列,使用类字典属性,返回的是S

  • python中pandas库中DataFrame对行和列的操作使用方法示例

    用pandas中的DataFrame时选取行或列: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.arange(3.)) data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w'] #选择表格中的'w'列,使用类字典属性,返回的是S

  • Python  处理 Pandas DataFrame 中的行和列

    目录 处理列 处理行 前言: 数据框是一种二维数据结构,即数据以表格的方式在行和列中对齐.我们可以对行/列执行基本操作,例如选择.删除.添加和重命名.在本文中,我们使用的是nba.csv文件. 处理列 为了处理列,我们对列执行基本操作,例如选择.删除.添加和重命名. 列选择:为了在 Pandas DataFrame 中选择一列,我们可以通过列名调用它们来访问这些列. # Import pandas package import pandas as pd # 定义包含员工数据的字典 data =

  • Java获取Excel中图片所在的行和列坐标位置

    目录 前言 获取图片所在行.列位置 前言 本文以Java代码示例展示如何来获取Excel工作表中图片的坐标位置.这里的坐标位置是指图片左上角顶点所在的单元格行和列位置,横坐标即顶点所在的第几列.纵坐标即顶点所在的第几行.下面是获取图片位置的详细方法及步骤. 程序环境: 按照如下方法来引用Spire.Xls.jar 版本:5.1.0 方法1:将Free Spire.XLS for Java​包下载到本地,解压,找到lib文件夹下的Spire.Xls.jar文件.然后在IDEA中打开“Project

  • Pandas.DataFrame删除指定行和列(drop)的实现

    目录 DataFrame指定的行删除 按行名指定(行标签) 按行号指定 未设置行名的注意事项 DataFrame指定的列删除 按列名指定(列标签) 按列号指定 多行多列的删除 使用drop()方法删除pandas.DataFrame的行和列. 在0.21.0版之前,请使用参数labels和axis指定行和列.从0.21.0开始,可以使用index或columns. 在此,将对以下内容进行说明. DataFrame指定的行删除 按行名指定(行标签) 按行号指定 未设置行名的注意事项 DataFra

随机推荐