Si tengo una serie que tiene NULL o algún valor no nulo. ¿Cómo puedo encontrar la primera fila donde el valor no es NULL para poder informar el tipo de datos al usuario? Si el valor no es nulo, todos los valores son del mismo tipo de datos en esa serie.
Gracias
Puede usar first_valid_index con select by 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) NonePara una serie, esto devolverá el primer valor no nulo:
Creación de series:
s = pd.Series(index=[2,4,5,6], data=[None, None, 2, None])que crea esta Serie:
2 NaN 4 NaN 5 2.0 6 NaN dtype: float64Puede obtener el primer valor que no sea NaN usando:
s.loc[~s.isnull()].iloc[0]que regresa
2.0Si, por otro lado, tiene un marco de datos como este:
df = pd.DataFrame(index=[2,4,5,6], data=np.asarray([[None, None, 2, None], [1, None, 3, 4]]).transpose(), columns=['a', 'b'])que se ve así:
ab 2 None 1 4 None None 5 2 3 6 None 4puede seleccionar por columna el primer valor no nulo usando esto (para la columna a):
df.a.loc[~df.a.isnull()].iloc[0]o si desea que la primera fila no contenga valores nulos en ningún lugar, puede usar:
df.loc[~df.isnull().sum(1).astype(bool)].iloc[0]que devuelve:
a 2 b 3 Name: 5, dtype: objectTambién puede usar el método get en su lugar
(Pdb) type(audio_col) <class 'pandas.core.series.Series'> (Pdb) audio_col.first_valid_index() 19 (Pdb) audio_col.get(first_audio_idx) 'first-not-nan-value.ogg'