Получить непустой столбец во фрейме данных Pandas

#python #pandas

#python #pandas

Вопрос:

В следующем фрейме данных pandas отсутствуют значения в разных столбцах для каждой строки.

 import pandas as pd
import numpy as np 

d = {'col1': [1, 2, None], 'col2': [None, 4, 5], 'col3': [3, None, None]}
df = pd.DataFrame(data=d)
df
  

Я знаю, что могу использовать это, чтобы определить, какие столбцы не пусты в i-й строке

 df.iloc[0].notnull()
  

И затем что-то вроде следующего, чтобы найти, какие конкретные столбцы не являются пустыми.

 np.where(df.iloc[0].notnull())
  

Однако, как я могу затем использовать эти значения в качестве индексов, чтобы вернуть не пропущенные столбцы в i-й строке?

Например, в 0-й строке я хотел бы вернуть столбцы обратно

 df.iloc[0, [0,2]]
  

Это не совсем правильно, но я предполагаю, что это где-то в этих строках?

 df.iloc[0, np.where(df.iloc[0].notnull())]
  

** Редактировать
Я понимаю, что могу это сделать

 df.iloc[0, np.where(df.iloc[0].notnull())[0].tolist()]
  

И это возвращает ожидаемый результат. Однако, является ли это наиболее эффективным подходом?

Комментарии:

1. Просто используйте df.stack().loc[0]

Ответ №1:

Вот способ, использующий np.isnan

 # set row number
row_number = 0

# get dataframe
df.loc[row_number, ~np.isnan(df.values)[row_number]]