Używam biblioteki pandas do wczytywania niektórych danych CSV. W moich danych niektóre kolumny zawierają ciągi. Ciąg "nan"
jest możliwą wartością, podobnie jak pusty ciąg. Udało mi się zmusić pandy do odczytywania „nan” jako ciągu znaków, ale nie wiem, jak to zrobić, aby nie odczytywać pustej wartości jako NaN. Oto przykładowe dane i wyniki
One,Two,Three
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven
>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []})
One Two Three
0 a 1 one
1 b 2 two
2 NaN 3 three
3 d 4 nan
4 e 5 five
5 nan 6 NaN
6 g 7 seven
To właściwie brzmi „nan” jako strun „nan”, ale nadal odczytuje pustych komórek jak Nan. Próbowałem przekazując str
w converters
argumencie do read_csv (z converters={'One': str})
), ale nadal odczytuje pustych komórek jak Nan.
Zdaję sobie sprawę, że po przeczytaniu mogę wypełnić wartości fillna, ale czy naprawdę nie ma sposobu, aby powiedzieć pandom, że pusta komórka w określonej kolumnie CSV powinna być odczytywana jako pusty ciąg zamiast NaN?
keep_default_na
poniżej.Odpowiedzi:
Dodałem bilet, aby dodać tutaj jakąś opcję:
https://github.com/pydata/pandas/issues/1450
W międzyczasie
result.fillna('')
powinieneś robić, co chceszEDYCJA: w wersji rozwojowej (aby być ostateczną 0.8.0), jeśli określisz pustą listę
na_values
, puste ciągi pozostaną pustymi ciągami w wynikuźródło
DataFrame.fillna
. Spróbujresult.fillna('', inplace=True)
. W przeciwnym razie tworzy kopię ramki danych.na_values
(lista lub dykt indeksowane według kolumn), jak ikeep_default_na
(bool).keep_default_na
Wartość wskazuje, czy domyślne wartości NA Pandy powinny być zastąpione lub dołączane do. Kod OP nie działa obecnie tylko dlatego, że brakuje w nim tej flagi. W tym przykładzie możesz użyćpandas.read_csv('test.csv',na_values=['nan'], keep_default_na=False)
.keep_default_na
. Ale pamiętaj, że nie chce, aby „nan” było traktowane jako domyślne. Dodałem pełniejsze wyjaśnienie jako nową odpowiedź.keep_default_na=False
), ale domyślne zachowanie pand na tym jest złe IMO. jeśli z jakiegoś powodu panda read_csv wnioskuje, że kolumna nie jest numeryczna, nie powinna automatycznie zmieniać pustych łańcuchów na NaN.Po przeczytaniu innych odpowiedzi i komentarzy nadal byłem zdezorientowany. Ale teraz odpowiedź wydaje się prostsza, więc proszę bardzo.
Od wersji Pandy 0.9 (od 2012) możesz czytać swój plik csv z pustymi komórkami interpretowanymi jako puste ciągi, po prostu ustawiając
keep_default_na=False
:pd.read_csv('test.csv', keep_default_na=False)
Ta kwestia jest dokładniej wyjaśniona w
Zostało to naprawione 19 sierpnia 2012 dla Pand w wersji 0.9 in
źródło
W Pandas read_csv mamy na to prosty argument:
Posługiwać się:
df = pd.read_csv('test.csv', na_filter= False)
Dokumentacja Pandy jasno wyjaśnia, jak działa powyższy argument.
Połączyć
źródło
na_values
rozpoznać „NaN”, ale obracającna_filter
się całkowicie, że będzie pokonać. Tak więc moja odpowiedź zkeep_default_na=False
.