2015-05-12 10 views
5

PANDAS'lı read_csv kullanırken, bozuk değer soruna değeri hakkında bir gösterge olmadan, tüm operasyon kesecektir.Pandalar ile bir CSV'den gelen tamsayıları okurken NaN'nin değerine nasıl nazikçe geri dönüş yapılır? ı, belirli bir sütun türü dönüştürülebilir istiyorum

import pandas as pd 
import numpy as np 


df = pd.read_csv('my.csv', dtype={ 'my_column': np.int64 }) 

hata ile biten bir yığın izleme ile sonuçlanacak mı: Böyle bir şey çalıştıran Örneğin

i satır numarasını veya hatalı kusurlu değeri olsaydı

ValueError: cannot safely convert passed user dtype of <i8 for object dtyped data in column ... 

ileti, bilinen NaN değerleri listesine ekleyebilirim, ancak bu şekilde yapabileceğim hiçbir şey yok.

arızaları göz ardı ederek bu durumda bir np.nan dönmek için ayrıştırıcı anlamanın bir yolu var mı?

Mesaj Scriptum: Tuhaftır, her türlü öneri olmadan (hiçbir dtype argüman) ayrıştırma sonra d['my_column'].value_counts() serisi için gerçek dtype başarısız olur jenerik object olmasına rağmen dtype hakkını anlaması ve doğru otomatik np.nan koymak gibi görünüyor

+1

sadece 'read_csv' tahmin daha iyi olduğunu ancak bu d_type NaN'' temsil edilemez 'olarak float64' – EdChum

+2

mu int64' 'value_counts' olur bazı değerini gösteren' olacağı anlamına gelecektir gibi 'na_values' ancak göründüğü bir numaraya dönüştürülebilir değil mi? (bu yüzden 'object' dtype') – joris

+0

sayesinde, yorumlarınız beni cevap olarak gönderdiğim çözüme götürdü. – danza

cevap

7

sayesinde yorumlarına hemen her çizimi.ve istatistiki çalışmasına i benim için çok şaşırtıcı olduğu there is no NaN for integers fark etti.

import pandas as pd 
import numpy as np 


df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 }) 

Bu bana başarısız dönüşüm değerine sahip bir anlaşılabilir hata mesajı verdi i na_values başarısız katma değer böylece:

df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 }, na_values=['n/a']) 

Bu nedenle I yüzer dönüştürülmesi için açık yolu nihayet görselleştirme ve istatistiksel fonksiyonları ile çalışır şekilde CSV içe olabilir: Eğer hakkını nokta koyduğumuzda

>>>> df['session_planned_os'].dtype 
dtype('float64') 

na_values, dtype bağımsız değişkenini read_csv'dan kaldırabilirsiniz. Tür çıkarsama artık doğru olur: Eğer bu geçebilir NaN` `olarak tedavi etmek değerlerini biliyorsanız o sütun, o tipe uygun için ne tüm değerleri bekliyor böylece açıkça d_type belirterek ediyoruz

df = pd.read_csv('my.csv', na_values=['n/a']) 
+1

Bir şey eklemek istiyorsanız, alternatif yanıtlarınızı göndermekte özgürsünüz. Tamsayı değerleri normalde [iki tamamlayıcı] (https://en.wikipedia.org/wiki/Two%27s_complement) biçiminde saklanır. gerçek sayılar üzerinde desenler. NaN'i belirtmek için hiç kimse kalmadı. Buna karşılık, çoğu kayan nokta, sonsuzluk ve NaN için bit kalıplarını ayıran [IEEE formatı] (https://en.wikipedia.org/wiki/IEEE_floating_point) yapılır. [Kayan nokta değerlerinin kesin olmadığını] unutmayın (http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate). – Kevin

+1

Not: dtype = {'my_column': np.float64} 'gerekli değildir, bu sonuç otomatik olarak (doğru na_values ​​ayarlandıktan sonra) olmalıdır – joris

+0

@joris haklısınız, teşekkürler. na_values'in değerini almak için gerekliydi. Cevabımı düzenleyeceğim – danza

İlgili konular