dataframe根据索引取值
dataframe是pandas库中最重要的数据结构之一,它是一个表格型的数据结构,可以理解为是由多个Series组成的字典。dataframe的每一列可以是不同的数据类型(如字符串、浮点数、整数等),因此它非常适合用于处理结构化数据。在实际应用中,我们常常需要根据索引来获取dataframe中的某些值,本文将从多个角度分析如何在pandas中根据索引取值。
一、基本使用
pandas中的dataframe可以通过loc和iloc两种方法来根据索引取值。其中,loc方法主要用于基于标签的索引,而iloc方法则主要用于基于整数位置的索引。
1.根据标签索引
对于基于标签的索引,我们可以使用loc方法来获取dataframe中的值。具体来说,我们可以通过loc方法传入行索引和列索引来获取相应的值。例如:
```
import pandas as pd
data = {'name': ['Tom', 'Jerry', 'Mickey'],
'age': [10, 15, 20],
'gender': ['M', 'M', 'F']}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
print(df.loc['a', 'name']) # Tom
```
上述代码中,我们首先定义了一个字典data,然后使用pd.DataFrame方法将该字典转换为dataframe。在定义dataframe时,我们指定了行索引为['a', 'b', 'c']。接着,我们使用loc方法取出了行索引为'a',列索引为'name'的值,即'Tom'。
2.根据整数位置索引
对于基于整数位置的索引,我们可以使用iloc方法来获取dataframe中的值。与loc方法类似,我们可以通过iloc方法传入行和列的整数位置来获取相应的值。例如:
```
import pandas as pd
data = {'name': ['Tom', 'Jerry', 'Mickey'],
'age': [10, 15, 20],
'gender': ['M', 'M', 'F']}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
print(df.iloc[0, 0]) # Tom
```
上述代码中,我们同样定义了一个字典data,并将其转换为dataframe。不同的是,我们使用了iloc方法来获取第一行第一列的值,即'Tom'。需要注意的是,这里的行和列的整数位置都是从0开始计数的。
二、切片操作
在实际应用中,我们通常需要获取dataframe中一部分的值,而不是单个值。这时,我们可以使用切片操作来实现。在pandas中,我们可以使用loc和iloc方法来进行切片操作。
1.基于标签的切片
对于基于标签的切片,我们可以使用loc方法来实现。具体来说,我们可以传入两个切片对象,分别表示行和列的范围。例如:
```
import pandas as pd
data = {'name': ['Tom', 'Jerry', 'Mickey', 'Minnie', 'Donald'],
'age': [10, 15, 20, 25, 30],
'gender': ['M', 'M', 'F', 'F', 'M']}
df = pd.DataFrame(data)
print(df.loc[1:3, 'name':'age'])
```
上述代码中,我们定义了一个包含5行3列的dataframe,然后使用loc方法获取了第2到4行(即索引为1到3)和第1到2列(即'name'和'age'列)的值。需要注意的是,这里的切片是包括末端的。
2.基于整数位置的切片
对于基于整数位置的切片,我们同样可以使用iloc方法来实现。具体来说,我们可以传入两个切片对象,分别表示行和列的整数位置的范围。例如:
```
import pandas as pd
data = {'name': ['Tom', 'Jerry', 'Mickey', 'Minnie', 'Donald'],
'age': [10, 15, 20, 25, 30],
'gender': ['M', 'M', 'F', 'F', 'M']}
df = pd.DataFrame(data)
print(df.iloc[1:4, 0:2])
```
上述代码中,我们同样定义了一个包含5行3列的dataframe,然后使用iloc方法获取了第2到4行和第1到2列的值。
三、布尔索引
在实际应用中,我们常常需要根据某些条件来获取dataframe中的值。这时,我们可以使用布尔索引来实现。在pandas中,布尔索引的原理是先根据条件生成一个与dataframe形状相同的布尔数组,然后使用该数组来进行切片操作。具体来说,我们可以使用loc和iloc方法来实现基于标签和整数位置的布尔索引。
1.基于标签的布尔索引
对于基于标签的布尔索引,我们可以使用loc方法来实现。具体来说,我们可以传入一个由布尔值组成的Series或数组,表示哪些行满足条件。例如:
```
import pandas as pd
data = {'name': ['Tom', 'Jerry', 'Mickey', 'Minnie', 'Donald'],
'age': [10, 15, 20, 25, 30],
'gender': ['M', 'M', 'F', 'F', 'M']}
df = pd.DataFrame(data)
print(df.loc[df['age'] > 20])
```
上述代码中,我们首先定义了一个包含5行3列的dataframe。然后,我们使用loc方法传入一个布尔条件df['age'] > 20,表示哪些行的'age'列大于20。最后,我们获取了所有满足该条件的行。
2.基于整数位置的布尔索引
对于基于整数位置的布尔索引,我们同样可以使用iloc方法来实现。具体来说,我们可以传入一个由布尔值组成的Series或数组,表示哪些行满足条件。例如:
```
import pandas as pd
data = {'name': ['Tom', 'Jerry', 'Mickey', 'Minnie', 'Donald'],
'age': [10, 15, 20, 25, 30],
'gender': ['M', 'M', 'F', 'F', 'M']}
df = pd.DataFrame(data)
print(df.iloc[(df['age'] > 20).values])
```
上述代码中,我们同样定义了一个包含5行3列的dataframe。然后,我们使用iloc方法和一个布尔条件df['age'] > 20来获取满足条件的行。需要注意的是,这里我们需要使用values属性将Series转换为数组。
综上所述,本文从基本使用、切片操作和布尔索引三个角度分析了如何在pandas中根据索引获取dataframe中的值。在实际应用中,我们可以根据具体情况选择使用loc或iloc方法,并结合切片和布尔索引来获取所需的值。