在Pandas Dataframe 中将None替换为NaN

wbgh16ku  于 2022-11-20  发布在  其他
关注(0)|答案(7)|浏览(671)

我有表x

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

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

我该怎么做?

monwx1rj

monwx1rj1#

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

import pandas as pd
import numpy as np

对于 Dataframe :

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

对于列或系列:

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

djmepvbi2#

这里有另一个选项:

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

fquxozlt3#

下行会将None取代为NaN

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

ffx8fchx4#

如果你使用df.replace([None],np.nan,inplace=True),这会将所有缺少数据的datetime对象更改为对象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)
qrjkbowd

qrjkbowd5#

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

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

piztneat

piztneat6#

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

o2rvlv0m7#

此解决方案非常简单,因为可以轻松替换所有列中的值。
您可以使用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

相关问题