es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Dividir columnas dos veces utilizando Python

Tengo un gran conjunto de datos (4GB) como este:

        userID   date   timeofday   seq
0   1000014754    20211028         20  133669542676:1:148;133658378700:1:16;133650937891:1:85
1   1000019906    20211028          6  508420199:0:0;133669581685:1:19
2   1000019906    20211028         22  133665269544:0:0

A partir de esto, me gustaría dividir “seq” por “;” primero y crear un nuevo conjunto de datos con renombrados. Se vería así:

        userID   date   timeofday   seq1      seq2  seq3 ... seqN
0   1000014754    20211028         20  133669542676:1:148 133658378700:1:16 133650937891:1:85
1   1000019906    20211028          6  508420199:0:0 133669581685:1:19 None None
2   1000019906    20211028         22  133665269544:0:0 None None None

Luego quiero dividir seq1,seq2,…,seqN por “:”, y crear un nuevo conjunto de datos con renombrados. Se vería así:

        userID   date   timeofday   name1  click1  time1 name2 click2 time2 ....nameN clickN timeN
0   1000014754    20211028         20  133669542676 1 148 133658378700 1 16 133650937891 1 85 None None None
1   1000019906    20211028          6  508420199 0 0 133669581685 1 19 None None None None None None
2   1000019906    20211028         22  133665269544 0 0 None None None None None None None None None

Sé que pandas.split puede dividir las columnas, pero no sé cómo hacerlo de manera eficiente. ¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para dividir la columna “seq” por “;” y crear un nuevo conjunto de datos con columnas separadas para cada división, puedes usar el método str.split de Pandas con la opción expand=True.

    # Dividir la columna seq por ';' y crear nuevas columnas
    df_seq = df['seq'].str.split(';', expand=True)
    df_seq.columns = [f'seq{col}' for col in df_seq.columns]
    

    Esto creará un nuevo conjunto de datos df_seq con columnas seq1, seq2, seq3…seqN.

    Para dividir aún más las columnas seq por “:” y crear un nuevo conjunto de datos con columnas separadas para cada división, puedes usar el mismo método con la opción expand=True.

    # Dividir las columnas seq1, seq2, ...seqN por ':' y crear nuevas columnas
    df_split = pd.concat([df[['userID', 'date', 'timeofday']],
                          df_seq.apply(lambda x: x.str.split(':', expand=True))], axis=1)
    df_split.columns = ['userID', 'date', 'timeofday',
                        *[f'{col}{num}' for col in ['name', 'click', 'time'] for num in range(1, len(df_seq.columns)+1)]]
    

    Esto creará un conjunto de datos final df_split con columnas userID, date, timeofday, name1, click1, time1, name2, click2, time2…nameN, clickN, timeN.

Comments are closed.