python - 取没有 NaN 的数据帧的最后 n 行
问题描述
让我们来看看这个数据框:
df = pd.DataFrame(dict(Col1 = [1,2,np.nan,4,5,6], Col2=[4,np.nan,5,np.nan,1,5]))
Col1 Col2
0 1.0 4.0
1 2.0 NaN
2 NaN 5.0
3 4.0 NaN
4 5.0 1.0
5 6.0 5.0
我想提取没有 NaN 的 df 的最后 n 行。
你能帮我得到这个预期的结果吗?
Col1 Col2
0 5 1
1 6 5
编辑:假设我不知道最后一个 NaN 在哪里
解决方案
使用DataFrame.dropna
并DataFrame.tail
转换为整数:
N = 2
df1 = df.dropna().tail(N).astype(int)
#alternative
#df1 = df.dropna().iloc[-N:].astype(int)
print (df1)
Col1 Col2
4 5 1
5 6 5
编辑:对于没有缺失值的最后一组,将错误值与DataFrame.isna
and进行比较DataFrame.any
,然后用累积和交换顺序,因此最后一组0
在掩码中有值:
m = df.isna().any(axis=1).iloc[::-1].cumsum().eq(0).sort_index()
df1 = df[m].astype(int)
print (df1)
Col1 Col2
4 5 1
5 6 5
如果没有行匹配,则返回正确的空 DataFrame:
df = pd.DataFrame(dict(Col1 = [1,2,np.nan,4], Col2=[np.nan,np.nan,5,np.nan]))
print (df)
Col1 Col2
0 1.0 NaN
1 2.0 NaN
2 NaN 5.0
3 4.0 NaN
m = df.isna().any(axis=1).iloc[::-1].cumsum().eq(0).sort_index()
df1 = df[m].astype(int)
print (df1)
Empty DataFrame
Columns: [Col1, Col2]
Index: []
推荐阅读
- angularjs - 在计数集成期间在 localhost 服务器中运行量角器
- javascript - 如何居中单击并在中间拖动滚动
- python - Scipy优化例程只找到一个答案
- c - 不断增长的阵列。通过指针而不是索引引用元素
- apache-spark - 尝试从外部站点打开 Power Bi
- r - 如何将数据帧索引放在r的for循环中?
- android - 无法解决:org.apache.directory.studio:org.apache.commons.io:2.6
- javascript - React js - 如何将函数的结果分配给状态?
- jquery - 使用输入名称制作所需的复选框
- ruby-on-rails - Rails 跳过 Gem 的迁移