Pandalar veri çerçevesinde Yok'u NaN ile değiştirin


99

Masam var x:

        website
0   http://www.google.com/
1   http://www.yahoo.com
2   None

Python Yok'u pandalar NaN ile değiştirmek istiyorum. Denedim:

x.replace(to_replace=None, value=np.nan)

Ama bende:

TypeError: 'regex' must be a string or a compiled regular expression or a list or dict of strings or regular expressions, you passed a 'bool'

Nasıl devam etmeliyim?

Yanıtlar:


146

Dizeyi değil Python nesnesini DataFrame.fillnaveya Series.fillnayerine geçecek olanı kullanabilirsiniz .None'None'

import pandas as pd
import numpy as np

Dataframe için:

df = df.fillna(value=np.nan)

Sütun veya seri için:

df.mycol.fillna(value=np.nan, inplace=True)

3
Bir SQL veritabanından veri aktardıysanız, bunu aşağıdaki cevapla birleştirebilirsiniz. Bu, Yok'u (bir dize değildir) NaN'ye dönüştürür. O zaman, df['column'].replace(nan, "", inplace=True)Hiçbirinin boş dize olmasını istediğinizi söyleyebilirsiniz.
VISQL

1
Bu cevap benim için çalışmıyor; yerini almaz None. Max'in cevabı işe yarıyor.
Daniel

En etkili olmak için bu sütun, özel bir çözüm bulunan: df['website'].replace(pd.np.nan, 0, inplace=True). Ayrıca Pandaların dahili referansına dayanarak Numpy'nin dahil edilmesini gerektirmez.
CodeMantle

2
pd.np.nanşimdi verir FutureWarning: The pandas.np module is deprecated and will be removed from pandas in a future version. Import numpy directly instead.
Alex Povel

16

İşte başka bir seçenek:

df.replace(to_replace=[None], value=np.nan, inplace=True)

3
Lütfen df.replace ([Yok], np.nan, inplace = True) çalıştırdığınızda dikkatli olun, bu, eksik verilere sahip tüm datetime nesnelerini nesne dtype olarak değiştirdi. Bu nedenle, verilerinizin boyutuna bağlı olarak vergilendirilebilecek olan tarih saatine geri döndürmediğiniz sürece, artık sorgularınız bozulmuş olabilir.
2019

15

Aşağıdaki satır Noneşununla değiştirilir NaN:

df['column'].replace('None', np.nan, inplace=True)

Sadece iki kez kontrol ettim, benim için çalışıyor. Herhangi bir hata alıyor musunuz veya 'Yok' değerleri değiştirilmiyor mu?
Max Izadi

Not: Bu yöntem np.nan, float64pandas'ın objectbir nan sütunu için varsayılan dtype'nin aksine , bir float dtype (örneğin:) içeren kullanır .
tehfink

6
Unutmayın: Bu, dizeleri "Yok" metniyle değiştirir, ancak açık Yok değerleriyle değiştirmez ( sabitte olduğu gibi Yok ).
Gregor Müllegger

4

Df.replace ([Yok], np.nan, inplace = True) kullanırsanız, bu, eksik verilere sahip tüm datetime nesnelerini nesne dtype olarak değiştirdi. Bu nedenle, verilerinizin boyutuna bağlı olarak vergilendirilebilecek olan tarih saatine geri döndürmediğiniz sürece, artık sorgularınız bozulmuş olabilir.

Bu yöntemi kullanmak istiyorsanız, önce df'nizdeki nesne dtype alanlarını tanımlayabilir ve ardından Hiçbiri'ni değiştirebilirsiniz:

obj_columns = list(df.select_dtypes(include=['object']).columns.values)
df[obj_columns] = df[obj_columns].replace([None], np.nan)

0
DataFrame['Col_name'].replace("None", np.nan, inplace=True)

1
Merhaba, stackoverflow'a hoş geldiniz ve yanıtladığınız için teşekkür ederim. Bu kod soruyu yanıtlasa da, sorunun neyi çözdüğüne ve nasıl çözdüğüne dair bazı açıklamalar eklemeyi düşünebilir misin? Bu, gelecekteki okuyucuların cevabınızı daha iyi anlamalarına ve ondan öğrenmelerine yardımcı olacaktır.
Plutian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.