Pandas trama de datos - Separar una cadena en varias columnas

celo:

Soy nuevo en el marco de las pandas y he buscado lo suficiente para resolver mi problema, pero no tuve mucha ayuda en línea.

Tengo una columna de cadena como se indica a continuación y quiero convertirlo en columnas separadas. Mi problema aquí es que he intentado dividir ella, pero no me dio la salida de la forma en que necesito.

*-----------------------------------------------------------------------------*
|  Total Visitor                                                              |
*-----------------------------------------------------------------------------*
|  2x Adult, 1x Adult + Audio Guide                                           |
|  2x Adult, 2x Youth, 1x Children                                            | 
|  5x Adult + Audio Guide, 1x Children + Audio Guide, 1x Senior + Audio Guide |
*-----------------------------------------------------------------------------*

Este es el código que se utiliza para separar mi cadena, pero no me dio resultado esperado.

df = data["Total Visitor"].str.split(",", n = 1, expand = True)

Mi salida esperada debe ser lo siguiente cuadro después de dividir la cadena:

*----------------------------------------------------------------------------------------------------------------*
|  Adult    | Adult + Audio Guide    | Youth   | Children    | Children + AG        | Senior + AG                                                                       
*----------------------------------------------------------------------------------------------------------------*
|  2x Adult | 1x Adult + Audio Guide |    -    |       -     |    -                    | -  
|
|  2x Adult |          -             |2x Youth | 1x Children |    -                    | -                               
|      -    | 5x Adult + Audio Guide |    -    |      -      |1x Children + Audio Guide| 1x Senior + Audio Guide |
*----------------------------------------------------------------------------------------------------------------*

¿Cómo puedo hacer esto? Cualquier ayuda u orientación sería grande.

Jezreel:

Idea es lista de diccionarios con las teclas de números retirados crear con xpor regex- ^\d+x\s+( ^es empezar de cuerda, \d+es uno o más números enteros y \s+es uno o más espacios en blanco) y pasar al DataFrameconstructor:

import re

L =[dict([(re.sub('^\d+x\s+',"",y),y) for y in x.split(', ')]) for x in df['Total Visitor']]

df = pd.DataFrame(L).fillna('-')
print (df)
      Adult     Adult + Audio Guide     Youth     Children  \
0  2x Adult  1x Adult + Audio Guide         -            -   
1  2x Adult                       -  2x Youth  1x Children   
2         -  5x Adult + Audio Guide         -            -   

      Children + Audio Guide     Senior + Audio Guide  
0                          -                        -  
1                          -                        -  
2  1x Children + Audio Guide  1x Senior + Audio Guide  

Otra idea similar es dividida por xlos nombres de las columnas de claves de dicts:

L = [dict([(y.split('x ')[1], y) for y in x.split(', ')]) for x in df['Total Visitor']]

df = pd.DataFrame(L).fillna('-')

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=294539&siteId=1
Recomendado
Clasificación