gpt4 book ai didi

python - 使用 pandas 建立索引的最佳实践

转载 作者:行者123 更新时间:2023-11-28 20:58:59 32 4
gpt4 key购买 nike

我想根据掩码 idx 选择行。我可以想到两种不同的可能性,要么使用 iloc,要么只使用括号。我在下面展示了两种可能性(在数据框 df 上)。它们是否同样可行?

idx = (df["timestamp"] >= 5) & (df["timestamp"] <= 10)
idx = idx.values
hr = df["hr"].iloc[idx]
timestamps = df["timestamp"].iloc[idx]

或以下:

idx = (df["timestamp"] >= 5) & (df["timestamp"] <= 10)
hr = df["hr"][idx]
timestamps = df["timestamp"][idx]

最佳答案

不,它们不一样。一个使用直接语法,而另一个依赖链式索引。

关键点是:

  • pd.DataFrame.iloc主要用于基于整数位置的索引。
  • pd.DataFrame.loc最常与标签或 bool 数组一起使用。
  • 链式索引,即通过 df[x][y],是 explicitly discouraged并且从来没有必要。
  • idx.values 返回 idx 系列的 numpy 数组表示。这不能喂.iloc,也不需要喂.loc,可以直接取idx

下面是两个可行的示例。在任一示例中,您都可以使用类似的语法来屏蔽数据框或系列。例如,df['hr'].loc[mask]df.loc[mask] 一样有效。

伊洛克

这里我们使用 numpy.where 来提取 bool 系列中 True 元素的整数索引。 iloc 确实接受 bool 数组,但在我看来,这不太清楚; "i"代表整数。

idx = (df['timestamp'] >= 5) & (df['timestamp'] <= 10)
mask = np.where(idx)[0]
df = df.iloc[mask]

地点

当我们已经按特定系列进行查询时,使用 loc 会更自然。

mask = (df['timestamp'] >= 5) & (df['timestamp'] <= 10)
df = df.loc[mask]
  • 当仅屏蔽行时,您可以完全省略 loc 访问器并使用 df[mask]
  • 如果按行屏蔽并过滤列,您可以使用 df.loc[mask, 'col_name']

Indexing and Selecting Datapandas 的基础:阅读官方文档是无可替代的。

关于python - 使用 pandas 建立索引的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50662176/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com