Ada*_*NYC 67 replace nan dataframe pandas nonetype
我有桌子x:
website
0 http://www.google.com/
1 http://www.yahoo.com
2 None
Run Code Online (Sandbox Code Playgroud)
我想用pandas NaN替换python None.我试过了:
x.replace(to_replace=None, value=np.nan)
Run Code Online (Sandbox Code Playgroud)
但我得到了:
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'
Run Code Online (Sandbox Code Playgroud)
我该怎么办呢?
Gui*_*not 102
您可以使用DataFrame.fillna或Series.fillna替换Python对象None,而不是字符串'None'.
import pandas as pd
Run Code Online (Sandbox Code Playgroud)
对于数据帧:
df.fillna(value=pd.np.nan, inplace=True)
Run Code Online (Sandbox Code Playgroud)
对于列或系列:
df.mycol.fillna(value=pd.np.nan, inplace=True)
Run Code Online (Sandbox Code Playgroud)
Nic*_*lai 14
这是另一种选择:
df.replace(to_replace=[None], value=np.nan, inplace=True)
Run Code Online (Sandbox Code Playgroud)
小智 11
以下行替换None为NaN:
df['column'].replace('None', np.nan, inplace=True)
Run Code Online (Sandbox Code Playgroud)
该解决方案很简单,因为可以轻松替换所有列中的值。
您可以使用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
Run Code Online (Sandbox Code Playgroud)
如果您使用 df.replace([None], np.nan, inplace=True),这会将所有缺少数据的日期时间对象更改为对象 dtypes。因此,现在您可能已经破坏了查询,除非您将它们改回日期时间,这可能会根据您的数据大小而增加。
如果要使用此方法,可以先识别 df 中的对象 dtype 字段,然后替换 None:
obj_columns = list(df.select_dtypes(include=['object']).columns.values)
df[obj_columns] = df[obj_columns].replace([None], np.nan)
Run Code Online (Sandbox Code Playgroud)