Ejecuté un comando en python pandas de la siguiente manera:
q1_fisher_r[(q1_fisher_r['TP53']==1) & q1_fisher_r[(q1_fisher_r['TumorST'].str.contains(':1:'))]]Recibí el siguiente error:
TypeError: Cannot perform 'rand_' with a dtyped [float64] array and scalar of type [bool]la solución que probé usando esto: enlace de error .
cambió el código en consecuencia como:
q1_fisher_r[(q1_fisher_r['TumorST'].str.contains(':1:')) & (q1_fisher_r[(q1_fisher_r['TP53']==1)])] Pero aún así recibí el mismo error que TypeError: Cannot perform 'rand_' with a dtyped [float64] array and scalar of type [bool]
Tuve un problema similar con una configuración como la siguiente, que produjo el mismo mensaje de error. La solución muy simple para mí fue tener cada condición individual entre paréntesis . Debería haberlo sabido, pero quiero resaltarlo en caso de que alguien más tenga el mismo problema.
Código incorrecto:
conditions = [ (df['A'] == '15min' & df['B'].dt.minute == 15), # Note brackets only surrounding both conditions together, not each individual condition df['A'] == '30min' & df['B'].dt.minute == 30, # Note no brackets at all ] output = [ df['Time'] + dt.timedelta(minutes = 45), df['Time'] + dt.timedelta(minutes = 30), ] df['TimeAdjusted'] = np.select(conditions, output, default = np.datetime64('NaT'))Código correcto:
conditions = [ (df['A'] == '15min') & (df['B'].dt.minute == 15), # Note brackets surrounding each condition (df['A'] == '30min') & (df['B'].dt.minute == 30), # Note brackets surrounding each condition ] output = [ df['Time'] + dt.timedelta(minutes = 45), df['Time'] + dt.timedelta(minutes = 30), ] df['TimeAdjusted'] = np.select(conditions, output, default = np.datetime64('NaT'))Para filtrar por múltiples condiciones, encadenarlos por & y filtrar por boolean indexing :
q1_fisher_r[(q1_fisher_r['TP53']==1) & q1_fisher_r['TumorST'].str.contains(':1:')] ^^^^ ^^^^ first condition second conditionEl problema es que este código devolvió datos filtrados, por lo que no se puede encadenar por condición:
q1_fisher_r[(q1_fisher_r['TumorST'].str.contains(':1:'))]Problema similar:
q1_fisher_r[(q1_fisher_r['TP53']==1)]Muestra :
q1_fisher_r = pd.DataFrame({'TP53':[1,1,2,1], 'TumorST':['5:1:','9:1:','5:1:','6:1']}) print (q1_fisher_r) TP53 TumorST 0 1 5:1: 1 1 9:1: 2 2 5:1: 3 1 6:1 df = q1_fisher_r[(q1_fisher_r['TP53']==1) & q1_fisher_r['TumorST'].str.contains(':1:')] print (df) TP53 TumorST 0 1 5:1: 1 1 9:1: