在pandas数据帧中用NaN替换None

时间:2014-05-19 17:10:13

标签: pandas dataframe replace nan nonetype

我有表x

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

我想用pandas 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'

我应该怎么做?

6 个答案:

答案 0 :(得分:71)

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

import pandas as pd

对于数据框:

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

对于专栏或系列:

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

答案 1 :(得分:9)

以下行将@SuppressWarnings("unchecked") E elementData(int index) { return (E) elementData[index]; } 替换为None

NaN

答案 2 :(得分:6)

这是另一种选择:

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

答案 3 :(得分:0)

如果使用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)

答案 4 :(得分:0)

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

答案 5 :(得分:0)

这是一个老问题,但这里是多列的解决方案:

values = {'col_A': 0, 'col_B': 0, 'col_C': 0, 'col_D': 0}
df.fillna(value=values, inplace=True)

有关更多选项,请查看文档:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html