在包含 NaN 值的 Pandas Dataframe 中获取行和列的 Pythonic 方法

考虑以下 Pandas DataFrame:


      |  val1 | val2 | val3 | val4

------------------------------------

  'a' |   1   | NaN  | NaN  | NaN

  'b' |  12   |  5   | NaN  | 4

  'c' |   3   |  6   | NaN  | NaN

  'd' |   4   |  7   | 6    | NaN

  'f' |   1   |  8   | 7    | 10

我怎样才能得到有值的行和Nan列。我找了几个小时,但所有的问题、答案和博客都是关于获取包含值的所有行或所有列NaN。


我做了以下代码:


row_has_NaN = df.isnull().any(axis=1)

rows_list = df[row_has_NaN].index.values  # Rows

for row in rows_list:

    print(row)

    row_series = df.loc[row]

    columns_has_NaN = row_series.isnull()

    columns_list = row_series[columns_has_NaN].index.values  # Columns by Row

    to_print = '\n\t'.join(columns_list)

    print(f"\t{to_print}")

所以我得到:


a

    val2

    val3

    val4

b

    val3

c

    val3

    val4

d

    val4

但我想知道是否有更 Pythonic 或更简洁的方法来做到这一点。提前致谢


慕桂英4014372
浏览 164回答 1
1回答

PIPIONE

我们有stack之后isnas = df.isna().stack().loc[lambda x : x]Out[75]: 'a'  val2    True     val3    True     val4    True'b'  val3    True'c'  val3    True     val4    True'd'  val4    True也可以reset_index在末尾添加#df.isna().stack().loc[lambda x : x].reset_index()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python