在熊猫数据框中用 NaN 代替无

我有 x表:

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

我想用熊猫代替 python。我试过:

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'

我该怎么做呢?

248614 次浏览

您可以使用 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)

以下代码行将 None替换为 NaN:

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

还有一个选择:

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

如果使用 df.place ([ Nothing ] ,np.nan,inplace = True) ,这将把所有缺少数据的日期时间对象更改为对象 dtype。因此,现在您可能已经中断了查询,除非您将它们更改回 datetime,这将根据您的数据大小而带来负担。

如果您想使用这个方法,您可以首先在 df 中标识对象 dtype 字段,然后替换 None:

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

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

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

这个解决方案很简单,因为可以轻松地替换所有列中的值。
你可以使用 dict:

import pandas as pd
import numpy as np


df = pd.DataFrame([[None, None], [None, None]])
print(df)
0     1
0  None  None
1  None  None


# replacing
df = df.replace({None: np.nan})
print(df)
0   1
0 NaN NaN
1 NaN NaN