pandas dataframe的loc和iloc函数的使用方法
在数据分析中,我们经常需要对数据进行各种操作,如选择、修改、删除等。在pandas库中,我们可以使用loc和iloc函数来实现这些操作。本文将详细介绍pandas dataframe的loc和iloc函数的使用方法。
1. loc函数
loc函数是基于标签的数据选择方法,它可以接受的输入有:
- 单个标签。例如:5或’a’,注意这里的5是指标签而不是索引位置。
- 标签列表。例如:[‘a’, ‘b’, ‘c’]。
- 切片对象。例如:’a’:’f’,注意这里和普通的Python切片不同,包含末端。
- 布尔数组。
下面我们通过一些示例来详细介绍loc函数的使用。
示例1:单个标签选择
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
print(df.loc['a'])
Output:
示例2:标签列表选择
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
print(df.loc[['a', 'c', 'e']])
Output:
示例3:切片对象选择
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
print(df.loc['a':'c'])
Output:
示例4:布尔数组选择
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
print(df.loc[df['age'] > 19])
Output:
2. iloc函数
iloc函数是基于位置的数据选择方法,它可以接受的输入有:
- 单个整数。例如:5。
- 整数列表。例如:[4, 3, 0]。
- 整数切片对象。例如:1:7。
- 布尔数组。
下面我们通过一些示例来详细介绍iloc函数的使用。
示例5:单个整数选择
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data)
print(df.iloc[3])
Output:
示例6:整数列表选择
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data)
print(df.iloc[[0, 2, 4]])
Output:
示例7:整数切片对象选择
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data)
print(df.iloc[1:3])
Output:
示例8:布尔数组选择
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data)
print(df.iloc[df['age'].values > 19])
Output:
3. loc和iloc的区别
loc和iloc虽然都是用来选择数据的,但它们之间还是有一些区别的。
- loc是基于标签的,而iloc是基于位置的。
- loc包含末端,而iloc不包含末端。
- loc可以接受布尔数组,但是iloc接受的布尔数组必须和dataframe长度相同。
下面我们通过一些示例来详细展示loc和iloc的区别。
示例9:loc和iloc的区别
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# loc基于标签
print(df.loc['a'])
# iloc基于位置
print(df.iloc[0])
# loc包含末端
print(df.loc['a':'c'])
# iloc不包含末端
print(df.iloc[0:2])
# loc可以接受布尔数组
print(df.loc[df['age'] > 19])
# iloc接受的布尔数组必须和dataframe长度相同
print(df.iloc[df['age'].values > 19])
Output:
4. loc和iloc的高级用法
除了基本的选择功能,loc和iloc还有一些高级的用法,如选择行和列,修改数据等。
示例10:选择行和列
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# 使用loc选择行和列
print(df.loc[['a', 'c', 'e'], ['name', 'score']])
# 使用iloc选择行和列
print(df.iloc[[0, 2, 4], [0, 2]])
Output:
示例11:修改数据
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# 使用loc修改数据
df.loc['a', 'age'] = 22
print(df)
# 使用iloc修改数据
df.iloc[0, 1] = 23
print(df)
Output:
示例12:删除数据
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# 使用loc删除数据
df = df.loc[df['name'] != 'Tom']
print(df)
# 使用iloc删除数据
df = df.iloc[df['age'].values != 20]
print(df)
Output:
示例13:使用loc函数进行条件筛选
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# 使用loc函数进行条件筛选
df = df.loc[(df['age'] > 19) & (df['score'] > 85)]
print(df)
Output:
示例14:使用iloc函数进行条件筛选
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data)
# 使用iloc函数进行条件筛选
df = df.iloc[(df['age'].values > 19) & (df['score'].values > 85)]
print(df)
Output:
示例15:使用loc函数修改某列数据
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# 使用loc函数修改某列数据
df.loc[df['name'] == 'Tom', 'score'] = 100
print(df)
Output:
示例16:使用iloc函数修改某列数据
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data)
# 使用iloc函数修改某列数据
df.iloc[df['name'].values == 'Tom', 2] = 100
print(df)
Output:
示例17:使用loc函数选择多行多列
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# 使用loc函数选择多行多列
print(df.loc[['a', 'c', 'e'], ['name', 'score']])
Output:
示例18:使用iloc函数选择多行多列
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data)
# 使用iloc函数选择多行多列
print(df.iloc[[0, 2, 4], [0, 2]])
Output:
示例19:使用loc函数选择一行多列
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# 使用loc函数选择一行多列
print(df.loc['a', ['name', 'score']])
Output:
示例20:使用iloc函数选择一行多列
import pandas as pd
data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'age': [20, 21, 19, 20, 18],
'score': [90, 85, 88, 92, 90]}
df = pd.DataFrame(data)
# 使用iloc函数选择一行多列
print(df.iloc[0, [0, 2]])
Output: