我有一个数据集d,其中包含不同形式的缺失值:
d = {'col1': [1, 2, '', 'N/A', 'unknown', None],
'col2': [3, 4, 'N/A', None, 'N/A_N/A', '']}
d = pd.DataFrame(data=d)
col1 col2
0 1 3
1 2 4
2 N/A
3 N/A None
4 unknown N/A_N/A
5 None
Run Code Online (Sandbox Code Playgroud)
我想看看每列中实际上缺少多少个值。因此,我想将所有空白、n/a 和未知数转换为None。我尝试了这段代码并得到以下结果:
d.replace(to_replace =['N/A', '', 'unknown', 'N/A_N/A'],
value = None)
col1 col2
0 1 3
1 2 4
2 2 4
3 2 None
4 2 None
5 None None
Run Code Online (Sandbox Code Playgroud)
我不明白为什么d.replace会这样,有人有更好的解决方案来解决我的问题吗?我希望它是这样的:
col1 col2
0 1 3
1 2 4
2 None None
3 None None
4 None None
5 None None
Run Code Online (Sandbox Code Playgroud)
这是已知行为,每当目标替换值为 时就会发生None。可以说,地位是设计的,是如何处理论点的结果。
我可以建议吗to_numeric?
pd.to_numeric(df.stack(), errors='coerce').unstack()
col1 col2
0 1.0 3.0
1 2.0 4.0
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
Run Code Online (Sandbox Code Playgroud)
或者,如果您将字典传递给replace,您的代码就可以工作。
# df.replace({'': None, 'N/A': None, 'N/A_N/A': None, 'unknown': None})
df.replace(dict.fromkeys(['N/A', '', 'unknown', 'N/A_N/A'], None))
col1 col2
0 1.0 3.0
1 2.0 4.0
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
Run Code Online (Sandbox Code Playgroud)