pandas dataframe loc和iloc

pandas dataframe loc和iloc

参考:pandas dataframe loc and iloc

在Python的数据处理库pandas中,DataFrame是一种二维的数据结构,非常适合处理表格型或异质型数据。在处理DataFrame时,我们经常需要对数据进行索引、选择和修改。pandas提供了多种索引方式,其中最常用的就是loc和iloc。本文将详细介绍pandas DataFrame的loc和iloc的用法。

1. loc

loc是基于标签的数据选择方法,它意味着我们要传入的是列名和行名。

示例代码1

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用loc选择Name为Tom的所有行
print(df.loc[df['Name'] == 'Tom'])

Output:

pandas dataframe loc和iloc

示例代码2

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用loc选择Age大于19的所有行
print(df.loc[df['Age'] > 19])

Output:

pandas dataframe loc和iloc

示例代码3

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用loc选择Name为Tom且Age大于19的所有行
print(df.loc[(df['Name'] == 'Tom') & (df['Age'] > 19)])

Output:

pandas dataframe loc和iloc

示例代码4

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用loc选择第0行和第2行
print(df.loc[[0, 2]])

Output:

pandas dataframe loc和iloc

示例代码5

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用loc选择Name和Age列
print(df.loc[:, ['Name', 'Age']])

Output:

pandas dataframe loc和iloc

2. iloc

iloc是基于位置的数据选择方法,它意味着我们要传入的是行号和列号。

示例代码6

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用iloc选择第0行
print(df.iloc[0])

Output:

pandas dataframe loc和iloc

示例代码7

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用iloc选择第0列
print(df.iloc[:, 0])

Output:

pandas dataframe loc和iloc

示例代码8

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用iloc选择第0行和第2行
print(df.iloc[[0, 2]])

Output:

pandas dataframe loc和iloc

示例代码9

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用iloc选择第0列和第2列
print(df.iloc[:, [0, 2]])

Output:

pandas dataframe loc和iloc

示例代码10

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用iloc选择第0行的第1列
print(df.iloc[0, 1])

Output:

pandas dataframe loc和iloc

3. loc和iloc的区别

loc和iloc的主要区别在于,loc是基于标签的,而iloc是基于位置的。这意味着,当我们使用loc时,我们传入的是行标签和列标签,而当我们使用iloc时,我们传入的是行号和列号。

此外,loc包含了结束标签,而iloc不包含结束位置。这意味着,如果我们使用df.loc[0:2],我们会得到第0行到第2行的所有行,包括第2行;而如果我们使用df.iloc[0:2],我们会得到第0行和第1行,不包括第2行。

示例代码11

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用loc选择第0行到第2行
print(df.loc[0:2])

Output:

pandas dataframe loc和iloc

示例代码12

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用iloc选择第0行到第2行
print(df.iloc[0:2])

Output:

pandas dataframe loc和iloc

4. loc和iloc的使用场景

在实际使用中,我们通常会根据具体的需求来选择使用loc还是iloc。

如果我们知道行标签和列标签,或者我们需要通过条件(如某列的值大于0)来选择数据,那么我们可以使用loc。如果我们知道行号和列号,或者我们需要选择某个范围内的数据(如前10行或者后5列),那么我们可以使用iloc。

示例代码13

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用loc选择Name为Tom的所有行的Email
print(df.loc[df['Name'] == 'Tom', 'Email'])

Output:

pandas dataframe loc和iloc

示例代码14

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用iloc选择前3行的前2列
print(df.iloc[0:3, 0:2])

Output:

pandas dataframe loc和iloc

5. loc和iloc的注意事项

在使用loc和iloc时,我们需要注意以下几点:

  1. loc和iloc都是只读的,也就是说,我们不能通过loc和iloc来修改DataFrame的结构(如添加或删除行列)。但是,我们可以通过loc和iloc来修改DataFrame的值。

  2. 如果我们传入的标签或位置不存在,loc和iloc会抛出错误。因此,我们在使用loc和iloc时,最好先确认我们传入的标签或位置是否存在。

  3. 在使用条件选择时,我们需要确保条件的长度和DataFrame的行数相同。否则,pandas会抛出错误。

示例代码15

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用loc修改Name为Tom的所有行的Age
df.loc[df['Name'] == 'Tom', 'Age'] = 22
print(df)

Output:

pandas dataframe loc和iloc

示例代码16

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用iloc修改第0行的第1列
df.iloc[0, 1] = 22
print(df)

Output:

pandas dataframe loc和iloc

6. 结论

总的来说,pandas的loc和iloc都是非常强大的数据选择工具,它们可以帮助我们方便地选择和修改数据。在实际使用中,我们可以根据具体的需求和场景,灵活地选择使用loc还是iloc。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程