Ni siquiera sé cómo abordar esta tarea.
Necesito analizar esas cadenas con dimensiones no solo para convertir pulgadas a centímetros sino también para calcular el volumen en una celda adyacente.
Bueno, calcular el volumen es fácil: multiplica L x W x H.
Pero, ¿cómo reconocer las dimensiones al analizar pulgadas frente a cm para un manejo correcto? Esta es una tarea imposible como me parece ahora.
La conversión es bien conocida: 1 cm = 0,393701" (y por lo tanto 1" = 2,54 cm)
pequeña ilustración de ello
# this is my skeleton data
#
import pandas as pd
shop_df = pd.DataFrame({
'Dimentions' : ['14.23" x 14.56" x 9.89"', '2.70cm x 22.30cm x 333.40cm', '23.45" x 21.99" x 45.76"'],
'Volume, cm3' : ['???', '???', '???'],
})
shop_df
Consulte el recorrido introductorio, elCentro de ayuda y cómo hacer una buena pregunta para ver cómo funciona este sitio y ayudarle a mejorar sus preguntas actuales y futuras, lo que puede ayudarle a obtener mejores respuestas. "¿Muéstrame cómo resolver este problema de codificación?" está fuera de tema para Stack Overflow. Debe hacer un intento honesto de encontrar la solución y luego hacer una pregunta específica sobre su implementación. Stack Overflow no pretende reemplazar los tutoriales y la documentación existentes.
- Poda
27/03/2021 a las 19:21
Puedes utilizar expresiones regulares o manipulación de cadenas para distinguir cm y pulgadas.
- ThePyGuy
27/03/2021 a las 19:28
Gracias, Prune. Parece que me he rendido cuando vine aquí. ¡Gracias, ThePyGuy!
-DNay
27/03/2021 a las 21:37
------------------------------------
Esto funcionará bien para ti:
import pandas as pd
def volume(x):
vol = 1
for item in x:
if '"' in item:
status = "inch"
v = item.replace('"', '')
v = v.strip()
vol*=float(v)
elif 'cm' in item:
status = "cm"
v = item.replace('cm', '')
v = v.strip()
vol*=float(v)
if status=="cm":
return vol
else:
return vol*(2.54**3)
shop_df = pd.DataFrame({
'Dimentions' : ['14.23" x 14.56" x 9.89"', '2.70cm x 22.30cm x 333.40cm', '23.45" x 21.99" x 45.76"'],
'Volume, cm3' : ['???', '???', '???'],
})
for row in shop_df.iterrows():
row[1]['Volume, cm3'] = volume(row[1]['Dimentions'].split("x"))
shop_df
1
Gracias, Lindo Panda, ¡esto es absolutamente genial!
-DNay
27/03/2021 a las 21:36
------------------------------------
Esta solución aplica una función que crea una lista de puntos flotantes a partir de las cadenas y convierte pulgadas a cm. Luego el volumen se calcula con np.prod:
import numpy as np
import pandas as pd
shop_df = pd.DataFrame({
'Dimentions' : ['14.23" x 14.56" x 9.89"', '2.70cm x 22.30cm x 333.40cm', '23.45" x 21.99" x 45.76"'],
})
def split_data(cell):
if '"' in cell:
return [round(float(i)*2.54, 2) for i in cell.replace('"', '').split(' x ')]
else:
return [float(i) for i in cell.replace('cm', '').split(' x ')]
shop_df['Dimentions'] = shop_df['Dimentions'].apply(split_data)
shop_df['Volume'] = shop_df['Dimentions'].apply(np.prod)
Resultado:
Dimensiones
Volumen
0
[36.14, 36.98, 25.12]
33571.8
1
[2.7, 22.3, 333.4]
20074
2
[59.56, 55.85, 116.23]
386630
1
Gracias, RJ Adriaansen, ¡esto es alucinante!
-DNay
27/03/2021 a las 21:35