xxx*_*222 4 python interpolation pandas
在熊猫中,我现在循环使用Series实例,当遇到NaN时,是否可以立即知道下一个非NaN的索引。我不想跳过那些NaN,因为我想对它们进行插值。
例如,现在我有一个a带有元素的系列
5, 6, 5, NaN, NaN, NaN, 7, 8, 9, NaN, NaN, NaN, 10, 10
Run Code Online (Sandbox Code Playgroud)
它们的索引是从0到13,当我迭代Series时,什么时候只想知道下一个NaN的索引是什么,以及下一个非NaN的索引是什么。因此,从一开始,我是否可以立即知道第一个NaN的索引为4?然后,当我跳到a [4]时,我需要知道下一个非NaN编号的索引,在这种情况下为6。
非常感谢。
您可以使用isnullmethod来查找具有哪些索引的NaN值,然后对于当前步骤,您可以将索引与下一个索引进行比较:
In [48]: s.index[s.isnull()]
Out[48]: Int64Index([3, 4, 5, 9, 10, 11], dtype='int64')
Run Code Online (Sandbox Code Playgroud)
您还可以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
Run Code Online (Sandbox Code Playgroud)
编辑
如果要使用整数索引,可以使用get_locpandas索引:
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
Run Code Online (Sandbox Code Playgroud)
编辑2
您可以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])
Run Code Online (Sandbox Code Playgroud)
或最简单的方法是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),)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1866 次 |
| 最近记录: |