2013-06-07 12 views
20

Mam ramkę danych z kluczami alfa-numerycznymi, które chcę zapisać jako CSV i przeczytać później. Z różnych powodów muszę jawnie odczytać tę kluczową kolumnę jako format ciągów, mam klucze, które są ściśle numeryczne lub nawet gorsze, takie jak: 1234E5, które Pandy interpretują jako zmiennoprzecinkowe. To oczywiście czyni klucz całkowicie bezużytecznym.Pandy czytające CSV jako typ łańcucha

Problem polega na tym, że określam ciąg dtype dla ramki danych lub dowolnej z jej kolumn, po prostu odrzucam śmieci. Mam przykładowy kod tutaj:

df = pd.DataFrame(np.random.rand(2,2), 
        index=['1A', '1B'], 
        columns=['A', 'B']) 
df.to_csv(savefile) 

ramka danych wygląda następująco:

  A   B 
1A 0.209059 0.275554 
1B 0.742666 0.721165 

Potem przeczytałem go tak:

df_read = pd.read_csv(savefile, dtype=str, index_col=0) 

a wynik jest:

A B 
B ( < 

Czy to jest problem z moim komputerem r, czy coś, co robię źle tutaj, czy tylko błąd?

Odpowiedz

25

Aktualizacja: to ma been fixed: od 0.11.1 ty przechodząc str/np.str będzie równoważne użyciu object.

Użyj dtype obiektu:

In [11]: pd.read_csv('a', dtype=object, index_col=0) 
Out[11]: 
         A      B 
1A 0.35633069074776547  0.745585398803751 
1B 0.20037376323337375 0.013921830784260236 

albo jeszcze lepiej, po prostu nie określisz dtype:

In [12]: pd.read_csv('a', index_col=0) 
Out[12]: 
      A   B 
1A 0.356331 0.745585 
1B 0.200374 0.013922 

Najlepiej unikać dtype Str, patrz na przykład here.

+0

Myślę, że '' read_csv'' powinien: a) podnieść na nieprawidłowym przekazanym dtype, a b) po prostu przetłumaczyć '' str'' dtype na '' object'', otworzyć problem? – Jeff

+0

https://github.com/pydata/pandas/issues/3795 –

+0

Dziękuję, spróbuję. Już wspomniałem, że nie mogę po prostu go wczytać bez określenia typu, Pandy ciągle pobierają klucze numeryczne, które muszą być ciągami i parsują je jako spacje. Tak jak powiedziałem w tym przykładzie, klucz taki jak: 1234E5 jest brany jako: 1234.0x10^5, co nie pomaga mi w najmniejszym stopniu, gdy idę, aby to sprawdzić. – daver

Powiązane problemy