Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

281
Vistas
pd.read_csv ignora la coma si está entre paréntesis

Tengo un archivo muy simple:

 [Name] Streamline 1 [Data] X [ m ], Y [ m ], Z [ m ], Velocity [ ms^-1 ] 2.66747564e-01, 0.00000000e+00, 2.03140453e-01, (0.00000000e+00, 8.17744827e+00, 0.00000000e+00) 2.66958952e-01, 0.00000000e+00, 2.07407191e-01, (0.00000000e+00, 6.77392197e+00, 0.00000000e+00) 2.63460875e-01, 0.00000000e+00, 2.06593186e-01, (0.00000000e+00, 7.04168701e+00, 0.00000000e+00) 2.65424699e-01, 0.00000000e+00, 2.00831652e-01, (0.00000000e+00, 8.93691921e+00, 0.00000000e+00) 2.70607203e-01, 0.00000000e+00, 2.02286631e-01, (0.00000000e+00, 8.45830917e+00, 0.00000000e+00) 2.68299729e-01, 0.00000000e+00, 1.97365344e-01, (0.00000000e+00, 1.00771456e+01, 0.00000000e+00) ...

Necesito cargar la velocidad como un vector, en una sola fila.

Mi código básico:

 df = pd.read_csv("C:/Users/Marek/Downloads/0deg-5ms.csv", skiprows=5)

Pero este intento lleva a que las primeras 2 columnas se conviertan en índice y el resto se divide en 4 columnas. index_col=False puede resolver el problema con el índice, pero conduce a un índice fuera de rango. Necesito un delimitador que le diga implícitamente a los pandas que ignoren lo que esté entre paréntesis. Pensé que Python ignoraba el separador entre corchetes mientras leía un archivo csv podría funcionar, pero sí, tengo espacios en todas partes. Encontré algunas soluciones que usan funciones extendidas para cargar archivos y manejarlos por líneas, como el archivo CSV que contiene una columna con una coma ocasional entre paréntesis bloquea pandas.read_csv y Load CSV con datos entre paréntesis en un marco de datos de pandas . Sin embargo, creo que este es un escenario muy fácil, ya que todas las líneas son similares y se pueden resolver agregando delimiter='some_regex' de una sola línea. Sin embargo, no puedo entender cómo debería verse esta expresión regular. Debería buscar delimitador , pero no (.*,.*) .

Lo he intentado con lo siguiente, pero esto da como resultado una sola columna:

 df = pd.read_csv("C:/Users/Marek/Downloads/0deg-5ms.csv", skiprows=5, delimiter=',^(\(.*,.*\))')

EDITAR: llegó a algo como esto - ,|(?:(\(.*,.*\))) , pero esto agrega una columna vacía después de cada coma.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede analizar manualmente el archivo:

 data = [] with open('data.csv') as fp: [next(fp) for i in range(5)] # skiprows=5 headers = [c.strip() for c in next(fp).split(',')] for line in fp: data.append([i.strip() for i in re.split(r',(?![^\(]*[\)])', line)]) df = pd.DataFrame(data, columns=headers).apply(pd.eval)

Producción:

 >>> df X [ m ] Y [ m ] Z [ m ] Velocity [ ms^-1 ] 0 0.266748 0.0 0.203140 [0.0, 8.17744827, 0.0] 1 0.266959 0.0 0.207407 [0.0, 6.77392197, 0.0] 2 0.263461 0.0 0.206593 [0.0, 7.04168701, 0.0] 3 0.265425 0.0 0.200832 [0.0, 8.93691921, 0.0] 4 0.270607 0.0 0.202287 [0.0, 8.45830917, 0.0] 5 0.268300 0.0 0.197365 [0.0, 10.0771456, 0.0] >>> df.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 6 entries, 0 to 5 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 X [ m ] 6 non-null float64 1 Y [ m ] 6 non-null float64 2 Z [ m ] 6 non-null float64 3 Velocity [ ms^-1 ] 6 non-null object dtypes: float64(3), object(1) memory usage: 320.0+ bytes >>> type(df.iloc[0, 3]) # [0.0, 8.17744827, 0.0] list >>> type(df.iloc[0, 3][1]) # 8.17744827 float
over 4 years ago · Santiago Trujillo Denunciar

0

Después de numerosos intentos, encontré una respuesta sobre cómo crear una línea muy simple sobre esto. Aquí está si alguien está interesado:

 df = pd.read_csv("C:/Users/Marek/Downloads/0deg-5ms.csv", skiprows=5, delimiter=',(?![^\(]*[\)])', engine="python")

El delimitador comprueba la coma en todo lo que está fuera de los corchetes. Simple como un encanto :)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda