Diciamo che ho un file di testo che assomiglia a questo:Come usare le parentesi quadre come carattere preventivo in Pandas.read_csv
Item,Date,Time,Location
1,01/01/2016,13:41,[45.2344:-78.25453]
2,01/03/2016,19:11,[43.3423:-79.23423,41.2342:-81242]
3,01/10/2016,01:27,[51.2344:-86.24432]
Quello che mi piacerebbe essere in grado di fare è leggere che con pandas.read_csv
, ma la seconda riga genererà un errore. Ecco il codice Attualmente sto usando:
import pandas as pd
df = pd.read_csv("path/to/file.txt", sep=",", dtype=str)
Ho cercato di impostare quotechar
a "[", ma che, ovviamente, mangia solo le linee fino alla prossima parentesi aperta e l'aggiunta di una parentesi di chiusura si traduce in una errore "stringa di lunghezza 2 trovata". Qualsiasi intuizione sarebbe molto apprezzata. Grazie!
Aggiornamento
C'erano tre soluzioni principali che sono stati offerti: 1) Dare una lunga serie di nomi per il frame di dati per permettere a tutti i dati da leggere e poi post-elaborare i dati, 2) trovare i valori tra parentesi quadre e tra virgolette, o 3) sostituire il primo n numero di virgole con il punto e virgola.
Nel complesso, non penso che l'opzione 3 sia una soluzione valida in generale (anche se va bene per i miei dati) perché a) cosa succede se ho valori quotati in una colonna che contengono virgole eb) cosa succede se la mia colonna con parentesi quadre non è l'ultima colonna? Ciò lascia le soluzioni 1 e 2. Penso che la soluzione 2 sia più leggibile, ma la soluzione 1 era più efficiente, in esecuzione in soli 1,38 secondi, rispetto alla soluzione 2, che funzionava in 3,02 secondi. I test sono stati eseguiti su un file di testo contenente 18 colonne e più di 208.000 righe.
Nessuna delle implementazioni CSV che ho visto distinguono i caratteri di apri/chiudi citazione, che è il problema principale qui. La soluzione migliore è pre-elaborare il file e sostituire le parentesi con virgolette bilanciate. Questo può essere fatto semplicemente usando espressioni regolari (in Python o in uno strumento di streaming come 'awk'). –
basta sostituire] su [, prima di passare a csv loader? – YOU