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.
Idea es lista de diccionarios con las teclas de números retirados crear con x
por 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 DataFrame
constructor:
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 x
los 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('-')