31-Pandas index操作索引

Pandas index操作索引

索引(index)是 Pandas 的重要工具,通过索引可以从 DataFame 中选择特定的行数和列数,这种选择数据的方式称为"子集选择"。

在 Pandas 中,索引值也被称为标签(label),它在 Jupyter 笔记本中以粗体字进行显示。索引可以加快数据访问的速度,它就好比数据的书签,通过它可以实现数据的快速查找。

创建索引

通过示例对 index 索引做进一步讲解。下面创建一个带有 index 索引的数据,并使用 read_csv() 这些读取数据:

python 复制代码
import pandas as pd
df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx")
print(df)

输出结果:

复制代码
    EMPNO   ENAME        JOB     MGR    HIREDATE   SAL    COMM  DEPTNO
0    7369   SMITH      CLERK  7902.0  1980-12-17   800     NaN      20
1    7499   ALLEN   SALESMAN  7698.0  1981-02-20  1600   300.0      30
2    7521    WARD   SALESMAN  7698.0  1981-02-22  1250   500.0      30
3    7566   JONES    MANAGER  7839.0  1981-04-02  2975     NaN      20
4    7654  MARTIN   SALESMAN  7698.0  1981-09-28  1250  1400.0      30
5    7698   BLAKE    MANAGER  7839.0  1981-05-01  2850     NaN      30
6    7782   CLARK    MANAGER  7839.0  1981-06-09  2450     NaN      10
7    7788   SCOTT    ANALYST  7566.0  1987-04-19  3000     NaN      20
8    7839    KING  PRESIDENT     NaN  1981-11-17  5000     NaN      10
9    7844  TURNER   SALESMAN  7698.0  1981-09-08  1500     0.0      30
10   7876   ADAMS      CLERK  7788.0  1987-05-23  1100     NaN      20
11   7900   JAMES      CLERK  7698.0  1981-12-03   950     NaN      30
12   7902    FORD    ANALYST  7566.0  1981-12-03  3000     NaN      20
13   7934  MILLER      CLERK  7782.0  1982-01-23  1300     NaN      10

通过列索引(标签)读取多列数据。

python 复制代码
import pandas as pd
df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx")

print('读取EMPNO、ENAME、JOB、MGR:\n',df[['EMPNO','ENAME','JOB','MGR']])
# 或使用loc函数
#print('读取EMPNO、ENAME、JOB、MGR:\n',df.loc[:,['EMPNO','ENAME','JOB','MGR']])

输出结果:

复制代码
读取EMPNO、ENAME、JOB、MGR:
     EMPNO   ENAME        JOB     MGR
0    7369   SMITH      CLERK  7902.0
1    7499   ALLEN   SALESMAN  7698.0
2    7521    WARD   SALESMAN  7698.0
3    7566   JONES    MANAGER  7839.0
4    7654  MARTIN   SALESMAN  7698.0
5    7698   BLAKE    MANAGER  7839.0
6    7782   CLARK    MANAGER  7839.0
7    7788   SCOTT    ANALYST  7566.0
8    7839    KING  PRESIDENT     NaN
9    7844  TURNER   SALESMAN  7698.0
10   7876   ADAMS      CLERK  7788.0
11   7900   JAMES      CLERK  7698.0
12   7902    FORD    ANALYST  7566.0
13   7934  MILLER      CLERK  7782.0

再看一组简单的示例:

python 复制代码
import pandas as pd
df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx",index_col='EMPNO')

print('读取ENAME、JOB、MGR:\n',df[['ENAME','JOB','MGR']])

输出结果:

复制代码
读取EMPNO、ENAME、JOB、MGR:
         ENAME        JOB     MGR
EMPNO                           
7369    SMITH      CLERK  7902.0
7499    ALLEN   SALESMAN  7698.0
7521     WARD   SALESMAN  7698.0
7566    JONES    MANAGER  7839.0
7654   MARTIN   SALESMAN  7698.0
7698    BLAKE    MANAGER  7839.0
7782    CLARK    MANAGER  7839.0
7788    SCOTT    ANALYST  7566.0
7839     KING  PRESIDENT     NaN
7844   TURNER   SALESMAN  7698.0
7876    ADAMS      CLERK  7788.0
7900    JAMES      CLERK  7698.0
7902     FORD    ANALYST  7566.0
7934   MILLER      CLERK  7782.0

设置索引

set_index() 将已存在的列标签设置为 DataFrame 行索引。除了可以添加索引外,也可以替换已经存在的索引。比如您也可以把 Series 或者一个 DataFrme 设置成另一个 DataFrame 的索引。示例如下:

python 复制代码
import pandas as pd
df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx")
print('读取ENAME、JOB、MGR:\n',df[['EMPNO','ENAME','JOB','MGR']].set_index(['EMPNO']))

输出结果:

复制代码
读取ENAME、JOB、MGR:
         ENAME        JOB     MGR
EMPNO                           
7369    SMITH      CLERK  7902.0
7499    ALLEN   SALESMAN  7698.0
7521     WARD   SALESMAN  7698.0
7566    JONES    MANAGER  7839.0
7654   MARTIN   SALESMAN  7698.0
7698    BLAKE    MANAGER  7839.0
7782    CLARK    MANAGER  7839.0
7788    SCOTT    ANALYST  7566.0
7839     KING  PRESIDENT     NaN
7844   TURNER   SALESMAN  7698.0
7876    ADAMS      CLERK  7788.0
7900    JAMES      CLERK  7698.0
7902     FORD    ANALYST  7566.0
7934   MILLER      CLERK  7782.0

重置索引

您可以使用 reset_index() 来恢复初始行索引,示例如下:

python 复制代码
import pandas as pd
df = pd.read_excel("C:\\Users\\qwy\\Desktop\\data\\empdata.xlsx")
print('读取ENAME、JOB、MGR:\n',df[['EMPNO','ENAME','JOB','MGR']].set_index(['EMPNO']))
print('重置后的索引:\n',df[['EMPNO','ENAME','JOB','MGR']].reset_index())

输出结果:

复制代码
读取ENAME、JOB、MGR:
         ENAME        JOB     MGR
EMPNO                           
7369    SMITH      CLERK  7902.0
7499    ALLEN   SALESMAN  7698.0
7521     WARD   SALESMAN  7698.0
7566    JONES    MANAGER  7839.0
7654   MARTIN   SALESMAN  7698.0
7698    BLAKE    MANAGER  7839.0
7782    CLARK    MANAGER  7839.0
7788    SCOTT    ANALYST  7566.0
7839     KING  PRESIDENT     NaN
7844   TURNER   SALESMAN  7698.0
7876    ADAMS      CLERK  7788.0
7900    JAMES      CLERK  7698.0
7902     FORD    ANALYST  7566.0
7934   MILLER      CLERK  7782.0
重置后的索引:
     index  EMPNO   ENAME        JOB     MGR
0       0   7369   SMITH      CLERK  7902.0
1       1   7499   ALLEN   SALESMAN  7698.0
2       2   7521    WARD   SALESMAN  7698.0
3       3   7566   JONES    MANAGER  7839.0
4       4   7654  MARTIN   SALESMAN  7698.0
5       5   7698   BLAKE    MANAGER  7839.0
6       6   7782   CLARK    MANAGER  7839.0
7       7   7788   SCOTT    ANALYST  7566.0
8       8   7839    KING  PRESIDENT     NaN
9       9   7844  TURNER   SALESMAN  7698.0
10     10   7876   ADAMS      CLERK  7788.0
11     11   7900   JAMES      CLERK  7698.0
12     12   7902    FORD    ANALYST  7566.0
13     13   7934  MILLER      CLERK  7782.0
相关推荐
sw1213898 分钟前
C++中的代理模式实战
开发语言·c++·算法
難釋懷18 分钟前
Lua语法入门-条件控制、函数
开发语言·junit·lua
桌面运维家30 分钟前
Win10打印机共享故障排查:权限与网络配置详解
开发语言·网络·php
Sunshine for you1 小时前
实时操作系统中的C++
开发语言·c++·算法
史蒂芬_丁1 小时前
C++深度拷贝例子
java·开发语言·c++
数据科学小丫2 小时前
Python 数据存储操作_数据存储、补充知识点:Python 与 MySQL交互
数据库·python·mysql
Knight_AL2 小时前
Nacos 启动问题 Failed to create database ’D:\nacos\nacos\data\derby-data’
开发语言·数据库·python
leiming62 小时前
CAN 通信协议学习讲义(带图文 + C 语言代码)
c语言·开发语言·学习
xht08323 小时前
PHP vs C语言:核心差异全解析
c语言·开发语言·php
yoothey3 小时前
Java字节流与字符流核心笔记(问答+考点复盘)
java·开发语言·笔记