Python 3.x 如何获取具有空值的最后一行

Python 3.x 如何获取具有空值的最后一行,python-3.x,pandas,Python 3.x,Pandas,我有一张桌子: a b c 1 11 21 2 12 22 3 3 3 NaN 14 24 NaN 15 NaN 4 4 4 5 15 25 6 6 6 7 17 27 我想删除列a中最后一行空值之前的所有行。我想要的输出是: a b c NaN

我有一张桌子:

a       b       c
1       11      21
2       12      22
3       3       3
NaN     14      24
NaN     15      NaN 
4       4       4
5       15      25
6       6       6
7       17      27
我想删除列
a
中最后一行空值之前的所有行。我想要的输出是:

a       b       c
NaN     15      NaN 
4       4       4
5       15      25
6       6       6
7       17      27
我找不到更好的解决方案,但是
first\u valid\u index
last\u valid\u index
。我想我不需要这个


奖金

如果一行中的所有值都相同,我还想在dataframe中添加一个新列。以下行应具有相同的值:

new       a       b       c
NaN       NaN     15      NaN 
4         4       4       4
4         5       15      25
6         6       6       6
6         7       17      27

谢谢大家!

查找包含
NaN
的行:

nanrows = df['a'].isnull()
查找其中最后一个的索引:

nanmax = df[nanrows].index.max()
进行切片:

df.iloc[nanmax:]
#     a   b     c
#4  NaN  15   NaN
#5  4.0   4   4.0
#6  5.0  15  25.0
#7  6.0   6   6.0
#8  7.0  17  27.0

查找包含
NaN
的行:

nanrows = df['a'].isnull()
查找其中最后一个的索引:

nanmax = df[nanrows].index.max()
进行切片:

df.iloc[nanmax:]
#     a   b     c
#4  NaN  15   NaN
#5  4.0   4   4.0
#6  5.0  15  25.0
#7  6.0   6   6.0
#8  7.0  17  27.0

isna
idxmax
一起使用:

new_df = df.iloc[df["a"].isna().idxmax()+1:]
输出:

     a   b     c
4  NaN  15   NaN
5  4.0   4   4.0
6  5.0  15  25.0
7  6.0   6   6.0
8  7.0  17  27.0
然后使用pandas.Series.where和
nunique

new_df["new"] = new_df["a"].where(new_df.nunique(axis=1).eq(1)).ffill()
print(new_df)
最终输出:

     a   b     c  new
4  NaN  15   NaN  NaN
5  4.0   4   4.0  4.0
6  5.0  15  25.0  4.0
7  6.0   6   6.0  6.0
8  7.0  17  27.0  6.0

isna
idxmax
一起使用:

new_df = df.iloc[df["a"].isna().idxmax()+1:]
输出:

     a   b     c
4  NaN  15   NaN
5  4.0   4   4.0
6  5.0  15  25.0
7  6.0   6   6.0
8  7.0  17  27.0
然后使用pandas.Series.where和
nunique

new_df["new"] = new_df["a"].where(new_df.nunique(axis=1).eq(1)).ffill()
print(new_df)
最终输出:

     a   b     c  new
4  NaN  15   NaN  NaN
5  4.0   4   4.0  4.0
6  5.0  15  25.0  4.0
7  6.0   6   6.0  6.0
8  7.0  17  27.0  6.0

(1) 您的“表”是数据帧还是其他什么?(2) Python中没有
null
。它是
None
还是
nan
或其他什么?我用nan代替null编辑了这个问题。如果您发现至少有一行具有相同的值,请再添加一列?列将有哪些值?如果我找到相同的值,新列也将存储相同的值。在所有列(1)中找到具有相同值的另一行之前,还将存储上一列中的值的行是“表”还是数据帧?(2) Python中没有
null
。它是
None
还是
nan
或其他什么?我用nan代替null编辑了这个问题。如果您发现至少有一行具有相同的值,请再添加一列?列将有哪些值?如果我找到相同的值,新列也将存储相同的值。在所有列中找到具有相同值的另一行之前,还将存储上一列中的值的行。当我找到包含任何NaN的行时,是否必须提及列名?因为我想在a专栏中找到南斯,但我忽略了这一部分。是的,你必须这样做。查看更新的答案。当我找到包含任何NAN的行时,是否必须提及列名?因为我想在a专栏中找到南斯,但我忽略了这一部分。是的,你必须这样做。请参阅更新的答案。