在熊猫数据框中将NaN替换为None


98

我有桌子x

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

我想用NaN替换python None。我试过了:

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

但是我得到了:

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'

我应该怎么做?

Answers:


144

您可以使用DataFrame.fillnaSeries.fillna来替换Python对象None,而不是字符串'None'

import pandas as pd
import numpy as np

对于数据框:

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

对于列或系列:

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

3
如果从SQL数据库导入数据,则可以将其与以下答案结合使用。这会将None(不是字符串)转换为NaN。然后,df['column'].replace(nan, "", inplace=True)如果您说您希望None为空字符串,则可以。
VISQL

1
这个答案对我不起作用;它不能代替None。马克斯的答案有效。
丹尼尔(Daniel)

我发现此特定于列的解决方案是最有效的:df['website'].replace(pd.np.nan, 0, inplace=True)。它也不需要包含Numpy,这要依靠熊猫的内置参考。
CodeMantle

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

16

这是另一个选择:

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

3
请注意,当您运行df.replace([None],np.nan,inplace = True)时,这会将所有缺少数据的日期时间对象更改为对象dtype。因此,现在除非查询将其更改回日期时间,否则您可能会遇到一些损坏的查询,这可能会给您增加负担,具体取决于数据的大小。
Doubledown '19

14

以下行替换NoneNaN

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

只是仔细检查,它确实对我有用。您是否遇到任何错误或“ None”值没有被替换?
Max Izadi '18

注意:此方法使用np.nan,它具有float dtype(例如float64),而不是objectnan列的pandas默认dtype 。
tehfink

6
请注意:这会将字符串替换为文本“ None”,但不会替换为显式的None值(与常量中的None一样)。
GregorMüllegger'19

4

如果使用df.replace([None],np.nan,inplace = True),则会将所有缺少数据的日期时间对象更改为对象dtype。因此,现在除非查询将其更改回日期时间,否则您可能会遇到一些损坏的查询,这可能会给您增加负担,具体取决于数据的大小。

如果要使用此方法,可以先在df中标识对象dtype字段,然后替换None:

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
您好,欢迎来到stackoverflow,并感谢您的回答。尽管此代码可以回答问题,但是您可以考虑添加一些说明来解决什么问题以及如何解决该问题吗?这将有助于将来的读者更好地了解您的答案并从中学习。
Plutian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.