Powiedzmy, że mamy plik tekstowy, który wygląda tak:Jak używać nawiasów kwadratowych jako postać cytując w 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]
Co chciałbym być w stanie zrobić to, że odczytywane z pandas.read_csv
, ale w drugim rzędzie pojawi się błąd. Oto kod obecnie używam:
import pandas as pd
df = pd.read_csv("path/to/file.txt", sep=",", dtype=str)
Próbowałem ustawić quotechar
do „[”, ale to oczywiście tylko zjada linii aż do następnego wolnego wspornika i dodanie wyników wspornika zamykającej w Znaleziono błąd "string of length 2". Każdy wgląd byłby bardzo doceniony. Dzięki!
Aktualizacja
Były trzy podstawowe rozwiązania, które oferowane były: 1) Daj długi szereg nazwisk do ramki danych w celu umożliwienia wszystkie dane należy czytać, a potem post-przetwarzania danych, 2) Znajdź wartości w nawiasach kwadratowych i umieść w cudzysłowie lub 3) zastąp pierwszy n liczbę przecinków średnikami.
Ogólnie rzecz biorąc, nie sądzę, że opcja 3 jest ogólnie dostępnym rozwiązaniem (choć dobrze dla moich danych), ponieważ a) co jeśli powołuję się na wartości w jednej kolumnie, które zawierają przecinki, i b) co jeśli moja kolumna w nawiasach kwadratowych nie jest ostatnią kolumną? To pozostawia rozwiązania 1 i 2. Myślę, że rozwiązanie 2 jest bardziej czytelne, ale rozwiązanie 1 było bardziej wydajne, działające w ciągu zaledwie 1,38 sekundy, w porównaniu do rozwiązania 2, które trwało 3,02 sekundy. Testy zostały przeprowadzone na pliku tekstowym zawierającym 18 kolumn i ponad 208 000 wierszy.
Żadna z wdrożonych CSV nie odróżnia otwartych/zamkniętych znaków cudzysłowu, co jest tutaj głównym problemem. Najlepiej jest przetworzyć plik i zamienić nawiasy na zrównoważone cytaty. Można to zrobić po prostu za pomocą wyrażeń regularnych (w Pythonie lub w narzędziu do strumieniowania, takim jak 'awk'). –
po prostu wymienić] na [, przed przejściem do programu ładującego csv? – YOU