2012-05-14 12 views
26

Po prostu zaczynam od Pand i czytam w pliku csv za pomocą metody read_csv(). Trudność, jaką mam, polega na tym, że pandy nie konwertują numerów moich telefonów na duże liczby, zamiast trzymać je jako struny. Zdefiniowałem konwerter, który właśnie zostawił numery sam, ale potem nadal konwertował na liczby. Kiedy zmieniłem konwerter, aby wstawić "z" na numery telefonów, pozostały ciągi. Czy istnieje sposób na zachowanie ich łańcuchów bez modyfikowania wartości pól?Określanie typu danych w Pandas csv reader

+2

Pokaż nam swój kod –

+3

@Gardner: czy rozważasz zaakceptowanie odpowiedzi? –

Odpowiedz

13

Wygląda na to, że nie można uniknąć pandy próbującej konwertować wartości numeryczne/boolowskie w pliku CSV. Spójrz na kod źródłowy pand dla parserów IO, w szczególności funkcje _convert_to_ndarrays i _convert_types. https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

zawsze można przypisać typ chcesz po przeczytaniu pliku:

df.phone = df.phone.astype(str) 
+1

Dzięki @lbolla, pomogło to w jednym z moich błędów, gdzie wartość zmiennoprzecinkowa została odczytana jako ciąg znaków, ponieważ inna kolumna była łańcuchem, a później powodowała problemy w funkcjach agregacji. Musiałem zrobić df ['col'] = df ['col']. Astype (float64) –

28

Ponieważ pandy 0.11.0 można użyć dtype argumentu jawnie określić typ danych dla każdej kolumny:

d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'}) 
+1

Zauważ, że to nie jest dostępne (jeszcze, mam nadzieję) dla innych funkcji wejściowych, takich jak 'pandas.read_fwf()' – ReneSac

+2

I ponownie przejrzałem temat i obsługa 'dtype' została już dodana do' pandas.read_fwf' :) – zero323

+0

Ta metoda nie działa w przypadku dużych zestawów danych, ponieważ istnieje inny sposób odczytu csv i tylko niektórych kolumn. –

Powiązane problemy