我怎样才能得到大 pandas 的下一个非南号的指数?

How can I get the index of next non-NaN number with series in pandas?(我怎样才能得到大 pandas 的下一个非南号的指数?)
本文介绍了我怎样才能得到大 pandas 的下一个非南号的指数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 pandas 中,我现在循环使用Series的一个实例,当我遇到NaN时,是否有可能立即知道下一个非NaN的索引。我不想跳过这些NAN,因为我想对它们进行内插。

例如,现在我有一个具有元素的系列a

5, 6, 5, NaN, NaN, NaN, 7, 8, 9, NaN, NaN, NaN, 10, 10
它们的索引是从0到13,当我迭代系列时,我只是想知道下一个NAN的索引是什么,以及下一个非NAN是什么。那么从一开始,我能立刻知道第一个NaN的指数是4吗?然后,当我跳到a[4]时,我需要知道下一个非NaN数字的索引,在本例中是6。

非常感谢。

推荐答案

您可以使用isnull方法查找您拥有NaN值的索引,然后可以将当前步骤的索引与下一步的索引进行比较:

In [48]: s.index[s.isnull()]
Out[48]: Int64Index([3, 4, 5, 9, 10, 11], dtype='int64')

您还可以使用first_valid_index查找第一个非NaN值,例如:

In [49]: s[4:]
Out[49]:
4    NaN
5    NaN
6      7
7      8
8      9
9    NaN
10   NaN
11   NaN
12    10
13    10
dtype: float64

In [50]: s[4:].first_valid_index()
Out[50]: 6

编辑

如果您想要一个整数索引,可以使用 pandas 索引中的get_loc

b = s[4:]

In [156]: b
Out[156]:
4    NaN
5    NaN
6      7
7      8
8      9
9    NaN
10   NaN
11   NaN
12    10
13    10
dtype: float64

In [157]: b.first_valid_index()
Out[157]: 6

In [158]: b.index.get_loc(b.first_valid_index())
Out[158]: 2

EDIT2

您可以使用get_indexer获取您拥有NaNs和有效值的所有索引:

import string
s = pd.Series([5, 6, 5, np.nan, np.nan, np.nan, 7, 8, 9, np.nan, np.nan, np.nan, 10, 10], index = list(string.ascii_letters[:len(s.index)]))

In [216]: s
Out[216]:
a     5
b     6
c     5
d   NaN
e   NaN
f   NaN
g     7
h     8
i     9
j   NaN
k   NaN
l   NaN
m    10
n    10
dtype: float64

valid_indx = s.index.get_indexer(s.index[~s.isnull()])
nan_indx = s.index.get_indexer(s.index[s.isnull()])

In [220]: valid_indx
Out[220]: array([ 0,  1,  2,  6,  7,  8, 12, 13])

In [221]: nan_indx
Out[221]: array([ 3,  4,  5,  9, 10, 11])    

或者最简单的方法是np.where

In [222]: np.where(s.isnull())
Out[222]: (array([ 3,  4,  5,  9, 10, 11], dtype=int32),)

In [223]: np.where(~s.isnull())
Out[223]: (array([ 0,  1,  2,  6,  7,  8, 12, 13], dtype=int32),)

这篇关于我怎样才能得到大 pandas 的下一个非南号的指数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)