Tengo un archivo CSV como este:
Time Latitude Longitude 2021-09-12 23:13 44.63 -63.56 2021-09-14 23:13 43.78 -62 2021-09-16 23:14 44.83 -54.6 2021-09-12 23:13 está en la columna Time .
Me gustaría abrirlo usando pandas. Pero hay un problema con la primera columna. Contiene un espacio. Si lo abro usando:
import pandas as pd points = pd.read_csv("test.csv", delim_whitespace=True)yo obtengo
| Tiempo | Latitud | Longitud | |
|---|---|---|---|
| 2021-09-12 | 23:13 | 44.630 | -63.560 |
| 2021-09-14 | 23:13 | 43.780 | -62.000 |
| 2021-09-16 | 23:14 | 44.830 | -54.600 |
Pero me gustaría omitir el espacio en la primera columna en CSV ( 2021-09-12 23:13 debe estar en la columna Time ) como:
| Tiempo | Latitud | Longitud | |
|---|---|---|---|
| 0 | 2021-09-12 23:13 | 44.630 | -63.560 |
| 1 | 2021-09-14 23:13 | 43.780 | -62.000 |
| 2 | 2021-09-16 23:14 | 44.830 | -54.600 |
¿Cómo puedo ignorar el primer espacio cuando uso pd.read_csv ?
Por favor, no se ciña a este archivo csv. Esta es una pregunta general para omitir (no considerar como un delimitador) los primeros espacios en la primera columna. Porque todos saben que el primer espacio es parte del valor del tiempo, no un delimitador.
Intente arreglar la columna y el índice después de cargar el archivo:
import pandas as pd points = pd.read_csv('test.csv', delim_whitespace=True) points = points.assign(Time=pd.to_datetime(df.index + ' ' + df['Time'])) \ .reset_index(drop=True)Producción:
>>> points Time Latitude Longitude 0 2021-09-12 23:13:00 44.63 -63.56 1 2021-09-14 23:13:00 43.78 -62.00 2 2021-09-16 23:14:00 44.83 -54.60Sus datos están en 2 tipos diferentes de formatos:
'Latitude' y 'Longitude' .Puede editar sus datos y agregar un segundo espacio entre latitud y longitud o engañarlo proporcionando los encabezados de las columnas por separado:
Crea un archivo:
with open("test.csv","w") as f: f.write("""Time Latitude Longitude 2021-09-12 23:13 44.63 -63.56 2021-09-14 23:13 43.78 -62 2021-09-16 23:14 44.83 -54.6""")Analizar archivo:
import pandas as pd # ignore files headers, supply own, use multiple spaces as seperator df = pd.read_csv("test.csv", delimiter = " ", header=0, names = ["Time","Latitude","Longitude"]) print (df)Producción:
Time Latitude Longitude 0 2021-09-12 23:13 44.63 -63.56 1 2021-09-14 23:13 43.78 -62.00 2 2021-09-16 23:14 44.83 -54.60Lo que ha mostrado no es un archivo csv. Punto final. Pandas read_csv es lo suficientemente versátil como para encontrar una solución alternativa que permita procesarlo. Pero en realidad es un archivo de campos de ancho fijo y debe leerse con pd.read_fwf :
pd.read_fwf(file_name, [(0,16), (16,26), (26, 40)])da directamente:
Time Latitude Longitude 0 2021-09-12 23:13 44.63 -63.56 1 2021-09-14 23:13 43.78 -62.00 2 2021-09-16 23:14 44.83 -54.60 Desde su edición, solo desea decirle a read_csv que considere el primer espacio en blanco como un carácter no delimitador. No conozco una forma sencilla de hacerlo. La forma difícil es leer el archivo, reemplazar el primer espacio en todas y cada una de las líneas con un carácter diferente. Luego, envía ese archivo modificado a read_csv con un convertidor personalizado para que la primera columna vuelva a cambiar el carácter especial a un espacio:
with open('test.csv') as fdin, open('test2.csv', 'w') as fdout): fdout.write(next(fdin) # do not process the header line for line in fdin: fdout.write(line.replace(' ', '_', 1) df = pd.read_csv('test2.csv', delim_whitespace=True, converters = {'Time': lambda x: x.replace('_', ' ')})También da:
Time Latitude Longitude 0 2021-09-12 23:13 44.63 -63.56 1 2021-09-14 23:13 43.78 -62.00 2 2021-09-16 23:14 44.83 -54.60