Podczas eksportowania danych DF do pliku DAT, jak usunąć brak ani numpy.nan w pliku? Potrzebuję tylko pustej wartości.

df.to_csv('test.dat')

Próbowałem:

df = df.fillna('')

Lub

df = df.replace(numpy.nan, '') and df = df.replace(None, '')

Ale nadal widzę "Brak" ani "Nan" w pliku CSV lub DAT.

3
thatMeow 29 czerwiec 2017, 19:37

3 odpowiedzi

Najlepsza odpowiedź

Użyj parametru.

Na_rep: ciąg, domyślna "brakuje reprezentacji danych"

I ustaw to do ""

Które możesz tutaj przeczytać:

pandas.dataframe.to_csv.

To jest kod:

file=pd.DataFrame({"one":[1,2,None,3,4],"two":[5,6,7,np.nan,8]})

file.to_csv("xxxxxxx",na_rep="")

Zaprowadzi do: Wynik

5
2Obe 29 czerwiec 2017, 20:42

Odpowiadając tutaj, aby skomentować to, co OP wspomniane w jego przyjętej odpowiedzi w przypadku, gdy inni potkną się na tym.

"It is clear that somehow pandas treat None and numpy.nan as string value here. Not sure why but this solution works.
To nie jest prawdą, a co się stało, było to, że albo kolumny oryginalnego DF były ustawione ciągami lub tylko wartości "Brak" i "NAN" były ustawione jako łańcuchy. W przeciwnym razie First_answer działałby z .replace(np.nan,'').

df=pd.DataFrame({
    'na_string':[1,2,'nan'],
    'na':[1,2,np.nan],
    'none_string':[1,2,'None'],
    'none':[1,2,None],
    'na_float':[1.1,1.2,np.nan],
    'mixed':[1.1,1.2,'nan']})
df

enter image description here

df.dtypes
#na_string       object
#na             float64
#none_string     object
#none           float64
#na_float       float64
#mixed           object
#dtype: object

Teraz zauważ, że gdy kolumna jest sklasyfikowana jako object, wszystkie na i None nie są identyfikowane jako np.nan, ponieważ są one ciągami.

enter image description here

A kiedy eksportujesz je za pomocą df.to_csv(path+'out.csv', na_rep='', index=False), nawet za pomocą na_rep, wszystkie struny są przechowywane, ale nie rzeczywiste wartości np.nan lub inne wartości null.

enter image description here

Jeśli zastąpiłeś swoje struny przez np.nan Mogłeś tam też zdobyć:

df.replace('None',np.nan, inplace=True)
df.replace('nan',np.nan, inplace=True)
df.to_csv(path+'out2.csv', na_rep='', index=False)

enter image description here

0
Sos 30 lipiec 2019, 15:25

Znalazłem rozwiązanie własne pytanie:

df = df.replace('None','')
df = df.replace('nan','')

Jasne jest, że jakoś pandy traktuje nikt i numpy.nan jako wartość string tutaj. Nie jestem pewien, dlaczego, ale to rozwiązanie działa.

0
thatMeow 29 czerwiec 2017, 20:14