Python 在数据帧中查找第一个和最后一个非NaN值
我有一个熊猫Python 在数据帧中查找第一个和最后一个非NaN值,python,datetime,pandas,Python,Datetime,Pandas,我有一个熊猫数据框按日期索引。有许多列,但许多列仅为时间序列的一部分填充。我想找到非NaN值的第一个和最后一个值的位置,以便提取日期并查看特定列的时间序列的长度 有没有人能给我指出正确的方向,告诉我怎么做这样的事情?提前感谢。@behzad.nouri的解决方案非常有效,分别使用and返回第一个和最后一个非NaN值。以下是一些有用的示例 系列 使用notna和idxmax的替代解决方案: # first valid index s.notna().idxmax() # 'b' # last v
数据框
按日期索引。有许多列,但许多列仅为时间序列的一部分填充。我想找到非NaN值的第一个和最后一个值的位置,以便提取日期并查看特定列的时间序列的长度
有没有人能给我指出正确的方向,告诉我怎么做这样的事情?提前感谢。@behzad.nouri的解决方案非常有效,分别使用and返回第一个和最后一个非
NaN值。以下是一些有用的示例
系列
使用notna
和idxmax
的替代解决方案:
# first valid index
s.notna().idxmax()
# 'b'
# last valid index
s.notna()[::-1].idxmax()
# 'd'
数据帧
(first | last)\u有效索引
未在数据帧上定义,但您可以使用apply
将其应用于每列
# first valid index for each column
df.apply(pd.Series.first_valid_index)
A 1
B 0
dtype: int64
# last valid index for each column
df.apply(pd.Series.last_valid_index)
A 3
B 0
dtype: int64
与前面一样,您还可以使用notna
和idxmax
。这是更自然的语法
# first valid index
df.notna().idxmax()
A 1
B 0
dtype: int64
# last valid index
df.notna()[::-1].idxmax()
A 3
B 0
dtype: int64
谢谢@behzad.nouri这正是我想要的!当缺少的值可能为“0”时,是否有解决方案?(即每个组/时间序列查找第一个非零值)?@KorayTugay A系列为1D(即单列)。如果要检查df
中的更多列,可以迭代df。例如,对于col\u name,df.items()中的数据:print(“列{}的第一个有效索引位于{}”).format(col\u name,data.First\u valid\u index())
可以使用df.apply(Series.First\u valid\u index)
而不是迭代数据帧的列
是指对于完整的NaN
列,它将返回0
。在这种情况下,我希望使用NaN
,因此我宁愿始终使用.apply(Series.first\u valid\u index)
。
# first valid index for each column
df.apply(pd.Series.first_valid_index)
A 1
B 0
dtype: int64
# last valid index for each column
df.apply(pd.Series.last_valid_index)
A 3
B 0
dtype: int64
# first valid index
df.notna().idxmax()
A 1
B 0
dtype: int64
# last valid index
df.notna()[::-1].idxmax()
A 3
B 0
dtype: int64