用Pandas索引和选择数据
在Pandas中进行索引 :
pandas中的索引是指从一个DataFrame中选择特定的行和列的数据。索引可能意味着选择所有的行和一些列,一些行和所有的列,或者每一个行和列中的一些。索引也可以被称为子集选择。
让我们看看Pandas中索引的一些例子。在这篇文章中,我们使用 “nba.csv “文件来下载CSV,点击这里。
选择一些行和一些列
让我们拿一个有一些假数据的DataFrame,现在我们对这个DataFrame进行索引。在这里,我们要从DataFrame中选择一些行和一些列。带有数据集的DataFrame。
假设我们想选择年龄、学院和工资这几列,只选择有阿米尔-约翰逊和特里-罗齐尔标签的行。
我们最终的DataFrame将看起来像这样。
选择部分行和所有列
比方说,我们想在一个数据框架的所有列中选择行Amir Jhonson , Terry Rozier和John Holland。
我们最终的DataFrame将看起来像这样。
选择某些列和所有行
比方说,我们想在一个数据框架中的所有行中选择年龄、身高和薪资这几列。
我们最终的DataFrame将看起来像这样。
Pandas索引使用[ ], .loc[], .iloc[], .ix[]
有很多方法可以从DataFrame中提取元素、行和列。在Pandas中,有一些索引方法可以帮助从DataFrame中获得一个元素。这些索引方法看起来非常相似,但行为却非常不同。Pandas支持四种类型的多axis索引,它们是。
- Dataframe.[ ];该函数也被称为索引运算器
- Dataframe.loc[ ] : 这个函数用于标签。
- Dataframe.iloc[ ]:该函数用于基于位置或整数的数据处理。
- Dataframe.ix[] : 这个函数用于基于标签和整数的数据。
它们被统称为索引器。这些是迄今为止最常见的索引数据的方法。这是四个有助于从DataFrame中获取元素、行和列的函数。
使用索引操作符索引数据框架[] :
索引操作符是用来指对象后面的方括号。.loc和.iloc索引器也使用索引操作符来进行选择。在这个索引操作符中,用来指代df[]。
选择单列
为了选择一个单独的列,我们只需将列的名称放在括号中即可。
# importing pandas package
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving columns by indexing operator
first = data["Age"]
print(first)
输出:
选择多列
为了选择多列,我们必须在一个索引操作符中传递一个列的列表。
# importing pandas package
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving multiple columns by indexing operator
first = data[["Age", "College", "Salary"]]
first
输出:
使用.loc[ ]索引一个数据框架 :
这个函数通过行和列的标签来选择数据。df.loc索引器以不同的方式选择数据,而不仅仅是索引操作。它可以选择行或列的子集。它也可以同时选择行和列的子集。
选择单行
为了使用.loc[]选择单行,我们在.loc函数中放入了一个单行标签。
# importing pandas package
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving row by loc method
first = data.loc["Avery Bradley"]
second = data.loc["R.J. Hunter"]
print(first, "\n\n\n", second)
输出:
如输出图像所示,由于两次都只有一个参数,所以返回了两个系列。
选择多行
为了选择多行,我们将所有行的标签放在一个列表中,并将其传递给.loc函数。
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving multiple rows by loc method
first = data.loc[["Avery Bradley", "R.J. Hunter"]]
print(first)
输出:
选择两行和三列
为了选择两行三列,我们选择一个我们要选择的两行和三列,并把它放在一个单独的列表中,像这样。
Dataframe.loc[["row1", "row2"], ["column1", "column2", "column3"]]
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving two rows and three columns by loc method
first = data.loc[["Avery Bradley", "R.J. Hunter"],
["Team", "Number", "Position"]]
print(first)
输出:
选择所有的行和一些列
为了选择所有的行和一些列,我们使用单冒号[:]来选择所有的行和我们想要选择的一些列的列表,像这样。
Dataframe.loc[:, ["column1", "column2", "column3"]]
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving all rows and some columns by loc method
first = data.loc[:, ["Team", "Number", "Position"]]
print(first)
输出:
使用.iloc[ ]索引一个数据框架 :
这个函数允许我们按位置检索行和列。为了做到这一点,我们需要指定我们想要的行的位置,以及我们想要的列的位置。df.iloc索引器与df.loc非常相似,但只使用整数位置来进行选择。
选择单行
为了使用.iloc[]选择单行,我们可以向.iloc[]函数传递一个整数。
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving rows by iloc method
row2 = data.iloc[3]
print(row2)
输出:
选择多行
为了选择多行,我们可以向.iloc[]函数传递一个整数列表。
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving multiple rows by iloc method
row2 = data.iloc [[3, 5, 7]]
row2
输出:
选择两行和两列
为了选择两行和两列,我们为行创建一个2个整数的列表,为列创建一个2个整数的列表,然后传递给一个.iloc[]函数。
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving two rows and two columns by iloc method
row2 = data.iloc [[3, 4], [1, 2]]
print(row2)
输出:
选择所有的行和一些列
为了选择所有的行和一些列,我们使用单冒号[:]来选择所有的行,对于列,我们做一个整数的列表,然后传递给一个.iloc[]函数。
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving all rows and some columns by iloc method
row2 = data.iloc [:, [1, 2]]
print(row2)
输出:
使用Dataframe.ix[ ]进行索引:
在pandas发展的早期,存在着另一个索引器,ix。这个索引器能够通过标签和整数位置来选择。虽然它用途广泛,但由于它不是明确的,所以引起了很多混乱。有时整数也可以是行或列的标签。因此,有一些情况下,它是模糊的。一般来说,ix是基于标签的,就像.loc索引器的作用一样。然而,.ix也支持整数类型的选择(如.iloc),其中传递一个整数。这只适用于DataFrame的索引不是基于整数的情况。ix将接受.loc和.iloc的任何输入。
注意:.ix索引器在最近的Pandas版本中已被弃用。
使用.ix[]作为.loc[]选择单一行
为了选择单行,我们在.ix函数中放入一个单行标签。如果我们把行标签作为一个函数的参数,这个函数的作用与.loc[]相似。
# importing pandas package
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving row by ix method
first = data.ix["Avery Bradley"]
print(first)
输出:
使用.ix[]作为.iloc[]选择单一行
为了选择单行,我们可以向.ix[]函数传递一个整数。如果我们在.ix[]函数中传递一个整数,这个函数与iloc[]函数类似。
# importing pandas package
import pandas as pd
# making data frame from csv file
data = pd.read_csv("nba.csv", index_col ="Name")
# retrieving row by ix method
first = data.ix[1]
print(first)
输出:
在DataFrame中进行索引的方法
功能 | 说明 |
---|---|
Dataframe.head() | 返回数据框的前n行。 |
Dataframe.tail() | 返回数据框的底部n行。 |
Dataframe.at[] | 访问一个行/列标签对的单个值。 |
Dataframe.iat[] | 通过整数位置访问行/列对的单个值。 |
Dataframe.tail() | 纯粹的基于整数位置的索引,用于按位置选择。 |
DataFrame.lookup() | 基于标签的DataFrame “花式索引 “功能。 |
DataFrame.pop() | 返回项目并从框架中删除。 |
DataFrame.xs() | 返回DataFrame的一个截面(行或列)。 |
DataFrame.get() | 从对象中为给定的键(DataFrame列、Panel slice等)获取项目。 |
DataFrame.isin() | 返回布尔值的DataFrame,显示DataFrame中的每个元素是否包含在数值中。 |
DataFrame.where() | 返回一个与自己形状相同的对象,如果条件为True,其对应的条目来自自己,否则来自其他。 |
DataFrame.mask() | 返回一个与自己形状相同的对象,如果cond为False,其对应的条目来自自己,否则来自其他。 |
DataFrame.query() | 用一个布尔表达式查询一个框架的列。 |
DataFrame.insert() | 在指定位置将列插入DataFrame。 |