Подтвердить что ты не робот

Pandas - найти первое ненулевое значение в столбце

Если у меня есть серия, которая имеет либо NULL, либо некоторое ненулевое значение. Как я могу найти 1-ю строку, где значение не равно NULL, поэтому я могу сообщить об этом типу данных пользователю. Если значение не равно null, все значения представляют собой один и тот же тип данных в этой серии.

благодаря

4b9b3361

Ответ 1

Вы можете использовать first_valid_index с выбором по loc:

s = pd.Series([np.nan,2,np.nan])
print (s)
0    NaN
1    2.0
2    NaN
dtype: float64

print (s.first_valid_index())
1

print (s.loc[s.first_valid_index()])
2.0

# If your Series contains ALL NaNs, you'll need to check as follows:

s = pd.Series([np.nan, np.nan, np.nan])
idx = s.first_valid_index()  # Will return None
first_valid_value = s.loc[idx] if idx is not None else None
print(first_valid_value)
None

Ответ 2

Для ряда это вернет первое нулевое значение:

Создание серий s:

s = pd.Series(index=[2,4,5,6], data=[None, None, 2, None])

который создает эту серию:

2    NaN
4    NaN
5    2.0
6    NaN
dtype: float64

Вы можете получить первое значение, отличное от NaN, используя:

s.loc[~s.isnull()].iloc[0]

который возвращается

2.0

Если у вас, с другой стороны, есть такой кадр данных:

df = pd.DataFrame(index=[2,4,5,6], data=np.asarray([[None, None, 2, None], [1, None, 3, 4]]).transpose(), 
                  columns=['a', 'b'])

который выглядит следующим образом:

    a       b
2   None    1
4   None    None
5   2       3
6   None    4

вы можете выбрать для каждого столбца первое ненулевое значение, используя это (для столбца a):

df.a.loc[~df.a.isnull()].iloc[0]

или если вы хотите, чтобы первая строка не содержала значений Null в любом месте, где вы можете использовать:

df.loc[~df.isnull().sum(1).astype(bool)].iloc[0]

Что возвращает:

a    2
b    3
Name: 5, dtype: object