#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]]