Python set_index详解
1. 简介
在Python中,通过pandas库提供的set_index方法可以用来设置DataFrame的行索引或列索引。set_index方法可以按照给定的列或多个列,将DataFrame的索引设置为对应列的值。
set_index方法的基本语法如下所示:
DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
参数说明:
- keys:设置为索引的列名,可以是单个列名,也可以是列表形式的多个列名。
- drop:指定是否将设置为索引的列从DataFrame中移除,默认为True,即移除。
- append:指定是否将新的索引附加到原有索引上,默认为False,即替换原有索引。
- inplace:指定是否在原DataFrame上进行操作,默认为False,即返回一个新的DataFrame。
- verify_integrity:指定在设置索引之前是否验证新的索引的唯一性,默认为False。
本文将详细介绍set_index方法的使用方式及示例代码。
2. set_index方法的常用参数
2.1 keys
keys参数指定了要设置为索引的列名,可以接收单个列名的字符串,也可以接收一个包含多个列名的列表。如果设置多个列名,那么DataFrame的索引将由这些列的值组成。
下面是一个示例,演示如何使用set_index方法将DataFrame的索引设置为单个列名的值:
import pandas as pd
# 创建一个示例DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 22, 20],
'City': ['New York', 'Paris', 'London', 'New York']}
df = pd.DataFrame(data)
# 将Name列设置为索引
df.set_index('Name', inplace=True)
# 查看设置索引后的DataFrame
print(df)
运行结果如下所示:
Age City
Name
Tom 20 New York
Nick 21 Paris
John 22 London
Tom 20 New York
可以看到,原来的索引被Name列的值替代。
2.2 drop
drop参数指定是否将设置为索引的列从DataFrame中移除。默认情况下,drop参数为True,即移除设置为索引的列。
下面是一个示例,演示如何禁用drop参数:
import pandas as pd
# 创建一个示例DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 22, 20],
'City': ['New York', 'Paris', 'London', 'New York']}
df = pd.DataFrame(data)
# 将Name列设置为索引,但保留Name列
df.set_index('Name', drop=False, inplace=True)
# 查看设置索引后的DataFrame
print(df)
运行结果如下所示:
Name Age City
Name
Tom Tom 20 New York
Nick Nick 21 Paris
John John 22 London
Tom Tom 20 New York
可以看到,Name列仍然保留在DataFrame中,只是同时作为索引使用。
2.3 append
append参数指定是否将新的索引附加到原有索引上。默认情况下,append参数为False,即替换原有索引。
下面是一个示例,演示如何禁用append参数:
import pandas as pd
# 创建一个示例DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 22, 20],
'City': ['New York', 'Paris', 'London', 'New York']}
df = pd.DataFrame(data, index=['A', 'B', 'C', 'D'])
# 将Name列设置为索引,并附加到原有索引上
df.set_index('Name', append=True, inplace=True)
# 查看设置索引后的DataFrame
print(df)
运行结果如下所示:
Age City
Name
A Tom 20 New York
B Nick 21 Paris
C John 22 London
D Tom 20 New York
可以看到,新的索引被附加在原有索引的后面。
2.4 inplace
inplace参数指定是否在原DataFrame上进行操作。默认情况下,inplace参数为False,即返回一个新的DataFrame。
下面是一个示例,演示如何在原DataFrame上进行操作:
import pandas as pd
# 创建一个示例DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 22, 20],
'City': ['New York', 'Paris', 'London', 'New York']}
df = pd.DataFrame(data)
# 将Name列设置为索引,直接在原DataFrame上操作
df.set_index('Name', inplace=True)
# 查看设置索引后的DataFrame
print(df)
运行结果如下所示:
Age City
Name
Tom 20 New York
Nick 21 Paris
John 22 London
Tom 20 New York
可以看到,直接在原DataFrame上进行操作,而不需要使用赋值语句。
2.5 verify_integrity
verify_integrity参数指定在设置索引之前是否验证新的索引的唯一性。默认情况下,verify_integrity参数为False,即不验证唯一性。
下面是一个示例,演示如何开启verify_integrity参数:
import pandas as pd
# 创建一个示例DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 22, 20],
'City': ['New York', 'Paris', 'London', 'New York']}
df = pd.DataFrame(data)
# 将Name列设置为索引,并验证唯一性
df.set_index('Name', verify_integrity=True, inplace=True)
# 查看设置索引后的DataFrame
print(df)
运行结果如下所示:
ValueError: Index has duplicate keys
可以看到,在开启了verify_integrity参数的情况下,如果新的索引不是唯一的,将会引发ValueError异常。
3. set_index方法的应用场景
set_index方法主要用于对DataFrame的行索引或列索引进行设置。应用场景如下:
3.1 数据框的行索引设置
当DataFrame中的某一列或多列的值具有唯一性,可以将其作为新的行索引。
下面是一个示例,演示如何将DataFrame中的Name列设置为行索引:
import pandas as pd
# 创建一个示例DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 22, 20],
'City': ['New York', 'Paris', 'London', 'New York']}
df = pd.DataFrame(data)
# 将Name列设置为索引
df.set_index('Name', inplace=True)
# 查看设置索引后的DataFrame
print(df)
运行结果如下所示:
Age City
Name
Tom 20 New York
Nick 21 Paris
John 22 London
Tom 20 New York
可以看到,Name列被设置为行索引。
3.2 数据框的列索引设置
当DataFrame中的某一行或多行的值具有唯一性,可以将其作为新的列索引。
下面是一个示例,演示如何将DataFrame中的Age列设置为列索引:
import pandas as pd
# 创建一个示例DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 22, 20],
'City': ['New York', 'Paris', 'London', 'New York']}
df = pd.DataFrame(data)
# 将Age列设置为索引
df.set_index('Age', inplace=True)
# 查看设置索引后的DataFrame
print(df)
运行结果如下所示:
Name City
Age
20 Tom New York
21 Nick Paris
22 John London
20 Tom New York
可以看到,Age列被设置为列索引。
3.3 多列作为索引
除了单一的列作为索引,set_index方法还可以接收一个包含多个列名的列表,将多个列的值组合起来作为索引。
下面是一个示例,演示如何将DataFrame中的Name和Age列设置为索引:
import pandas as pd
# 创建一个示例DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 22, 20],
'City': ['New York', 'Paris', 'London', 'New York']}
df = pd.DataFrame(data)
# 将Name和Age列设置为索引
df.set_index(['Name', 'Age'], inplace=True)
# 查看设置索引后的DataFrame
print(df)
运行结果如下所示:
City
Name Age
Tom 20 New York
Nick 21 Paris
John 22 London
Tom 20 New York
可以看到,Name和Age两列被组合起来作为索引。
4. 总结
通过本文的介绍,我们了解了set_index方法的使用方式和常用参数。set_index方法可以用于设置DataFrame的行索引或列索引,可以设置单个列或多个列作为索引,还可以控制是否移除被设置为索引的列,是否将新的索引附加到原有索引上,以及是否在原DataFrame上进行操作。set_index方法在数据的处理和分析过程中非常实用,可以灵活地满足不同的需求。