4.3 混合选择:ix[] (不推荐,建议使用 loc 或 iloc)


文档摘要

4.3 混合选择:ix[] (不推荐,建议使用 loc 或 iloc) 4.3 混合选择: (不推荐,建议使用 或 ) 在 Pandas 中, 曾经是一种用于混合选择数据的方法,它允许你同时使用标签和整数索引来访问 DataFrame 或 Series 中的数据。然而,由于其行为的模糊性和可能产生的歧义, 已被标记为不推荐使用,并且在较新的 Pandas 版本中可能会被移除。因此,强烈建议使用 和 来进行数据选择,因为它们提供了更明确和可预测的行为。 的工作原理 (已过时) 尝试根据提供的索引类型来智能地选择数据。它的工作方式如下: 如果传递的是标签: 表现得像 ,即基于标签进行选择。 如果传递的是整数: 表现得像 ,即基于整数索引进行选择。

4.3 混合选择:ix[] (不推荐,建议使用 loc 或 iloc)

4.3 混合选择:ix[] (不推荐,建议使用 lociloc)

在 Pandas 中,ix[] 曾经是一种用于混合选择数据的方法,它允许你同时使用标签和整数索引来访问 DataFrame 或 Series 中的数据。然而,由于其行为的模糊性和可能产生的歧义,ix[] 已被标记为不推荐使用,并且在较新的 Pandas 版本中可能会被移除。因此,强烈建议使用 loc[]iloc[] 来进行数据选择,因为它们提供了更明确和可预测的行为。

ix[] 的工作原理 (已过时)

ix[] 尝试根据提供的索引类型来智能地选择数据。它的工作方式如下:

  1. 如果传递的是标签ix[] 表现得像 loc[],即基于标签进行选择。

  2. 如果传递的是整数ix[] 表现得像 iloc[],即基于整数索引进行选择。

  3. 如果索引同时包含标签和整数ix[] 的行为可能变得模糊,并且可能导致意外的结果。

ix[] 的问题与歧义

ix[] 的主要问题在于其行为的模糊性。当 DataFrame 的索引是整数类型时,ix[] 无法区分是基于标签的索引还是基于位置的索引,这可能导致意外的结果。

例如,考虑以下 DataFrame:

import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=[1, 2, 3]) print(df)

输出:

A B 1 1 4 2 2 5 3 3 6

如果使用 df.ix[1],你可能期望访问索引为 1 的行(即标签为 1 的行)。然而,ix[] 可能会将其解释为基于位置的索引,从而返回第一行(索引为 0 的行,但标签为1的行)。这种歧义性是 ix[] 被弃用的主要原因。

为什么推荐使用 loc[]iloc[]

loc[]iloc[] 提供了更明确和可预测的行为,从而避免了 ix[] 的歧义性。

  • loc[]: 基于标签进行选择。无论索引的类型是什么,loc[] 始终使用标签来选择数据。

  • iloc[]: 基于整数索引进行选择。iloc[] 始终使用整数索引来选择数据,忽略索引的实际标签。

使用 loc[]iloc[] 可以避免混淆,并使代码更易于理解和维护。

代码示例与实践

以下是一些使用 ix[] (不推荐) 以及 loc[]iloc[] 的代码示例,以说明它们之间的差异和推荐的使用方法。

1. 使用 ix[] (不推荐)

import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=[1, 2, 3]) # 使用 ix[] 选择标签为 1 的行 (可能产生歧义) # 注意:在新的pandas版本中,ix[]可能已经无法使用,或者会给出警告 # print(df.ix[1]) # 不推荐

2. 使用 loc[] (推荐)

import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=[1, 2, 3]) # 使用 loc[] 选择标签为 1 的行 print(df.loc[1]) # 使用 loc[] 选择标签为 1 和 2 的行 print(df.loc[[1, 2]]) # 使用 loc[] 选择标签为 1 的行的 'A' 列 print(df.loc[1, 'A']) # 使用 loc[] 选择标签为 1 和 2 的行的 'A' 和 'B' 列 print(df.loc[[1, 2], ['A', 'B']])

3. 使用 iloc[] (推荐)

import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=[1, 2, 3]) # 使用 iloc[] 选择第一行 (整数索引为 0) print(df.iloc[0]) # 使用 iloc[] 选择第一行和第二行 print(df.iloc[[0, 1]]) # 使用 iloc[] 选择第一行的第一列 print(df.iloc[0, 0]) # 使用 iloc[] 选择第一行和第二行的第一列和第二列 print(df.iloc[[0, 1], [0, 1]])

总结 loc[]iloc[] 的使用场景:

  • loc[]: 当你知道行或列的标签时,使用 loc[]。例如,根据日期、股票代码或客户 ID 选择数据。

  • iloc[]: 当你知道行或列的整数索引时,使用 iloc[]。例如,选择 DataFrame 的前几行或特定列。

Mermaid 图:loc[] vs iloc[]

以下是一个 Mermaid 图,说明了 loc[]iloc[] 之间的区别:

图解:

  1. 从 "选择数据" 开始。

  2. 判断是否使用标签进行选择。

  3. 如果是,则使用 loc[],它基于标签选择数据。

  4. 如果否,则使用 iloc[],它基于整数索引选择数据。

  5. 最后,返回选定的数据。

避免 ix[] 的最佳实践

  • 始终使用 loc[]iloc[] 来进行数据选择。

  • 明确指定是基于标签还是基于整数索引进行选择。

  • 避免在混合索引的情况下使用 ix[]

  • 在更新 Pandas 版本时,检查 ix[] 是否已被移除,并将其替换为 loc[]iloc[]

结论

虽然 ix[] 曾经是一种方便的混合选择方法,但由于其行为的模糊性和可能产生的歧义,它已被标记为不推荐使用。为了编写更清晰、更易于维护的代码,强烈建议使用 loc[]iloc[] 来进行数据选择。loc[] 基于标签进行选择,而 iloc[] 基于整数索引进行选择。通过明确指定是基于标签还是基于整数索引进行选择,可以避免混淆,并确保代码的行为符合预期。

总而言之,拥抱 loc[]iloc[],告别 ix[],你的 Pandas 代码将会更加健壮和易于理解。 记住,清晰的代码胜过任何花哨的技巧。


发布者: 作者: 转发
评论区 (0)
U