Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

497
Views
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 Cargar 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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!