【问题标题】:Is there a non complicated way to access the first non nan value of a pandas series?有没有一种不复杂的方法来访问熊猫系列的第一个非 nan 值?
【发布时间】:2020-06-21 17:48:25
【问题描述】:

我有一个数据框列,其中包含 nan 和整数的混合值。我的目标是检索第一个非 nan 值。该列看起来像这样 [nan, nan, 3, nan, 5, ...]。根据我在堆栈溢出中找到的答案,我想出了以下两种方法。显然,示例 1 的效率更高,但对于目标来说仍然感觉很复杂。有没有比下面的示例 no1 更好的方法来检索 pandas 系列的第一个非 nan 值?

# the column I want to access is the last in the df
df.iloc[df.col.first_valid_index(),-1] 

每个循环 59.6 µs ± 2.54 µs(7 次运行的平均值 ± 标准偏差,每次 10000 个循环)

df.col.fillna(method='bfill')[0]

每个循环 208 µs ± 7 µs(7 次运行的平均值 ± 标准偏差,每次 1000 个循环)

【问题讨论】:

  • 这是我的第一个问题:)
  • 嗯...据我所知,并没有比 #1 好...而且您可能想要loc - 而不是 iloc 用于您的索引恰好不在的地方零开始和 1 增量 RangeIndex... 所以:df.loc[df['col'].first_valid_index()]...

标签: python pandas dataframe


【解决方案1】:

欢迎!您可以尝试这样的事情,它可能比提到的解决方案更容易理解。逻辑更容易理解,但这种方法的主要缺点是它比你提到的第一个解决方案慢了大约 10 倍

df[df.col.notna()].iloc[0]

【讨论】:

  • 这将返回所需值的索引,而不是实际值。顺便谢谢你的回答!
  • df[df.col.notna()].head(1) 是可能的,但速度也较慢。 663 µs ± 33.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多