pandas 在行而不是列上进行条件筛选

j2datikz  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(113)

给定一个表
| | 列_0|列_1|第二栏|
| - ------|- ------|- ------|- ------|
| 无|a_00|a_01|a_02|
| 1个|a_10|楠|a_12|
| 第二章|a_20|a_21|a_22|
如果要返回col_1中不包含nan的所有行,则可以通过df[df['col_1'].notnull()]轻松完成,它返回
| | 列_0|列_1|第二栏|
| - ------|- ------|- ------|- ------|
| 无|a_00|a_01|a_02|
| 第二章|a_20|a_21|a_22|
如果我想返回所有列,使其第1行不包含nan,我应该怎么做?下面是我想要的结果:
| | 列_0|第二栏|
| - ------|- ------|- ------|
| 无|a_00|a_02|
| 1个|a_10|a_12|
| 第二章|a_20|a_22|
我可以转置 Dataframe ,删除转置 Dataframe 上的行,然后转置回去,但是如果 Dataframe 很大,效率会很低。

df.loc[df.loc[0].notnull()]

但密码出错了有什么办法吗

qyzbxkaa

qyzbxkaa1#

你可以使用panda**DataFrame.dropna()**函数来实现这个功能。
情况1:想要逐列丢弃所有Nan值-

ex:  df.dropna(axis = 1)

axis = 0表示水平轴或行,axis = 1表示垂直轴或列。
情况2:想要删除多达n个行

ex: df[:n].dropna(axis = 1)

情况2:删除列集中的列-

ex: df[["col_1","col_2"]].dropna(axis = 1)

它将丢弃这两列中的nan值
注意:如果您想使此更改永久化,请使用inplace = True(df.dropna(axis=1,inplace = True)或将结果赋给另一个变量(df 2 = df.dropna(axis=1))

iqjalb3h

iqjalb3h2#

沿着列轴使用loc进行布尔索引

df.loc[:, df.iloc[1].notna()]

结果

col_0 col_2
0  a_00  a_02
1  a_10  a_12
2  a_20  a_22

相关问题