在Pandas DataFrame中将无效值替换为None

发布于 2021-01-29 19:06:54

None在Python的Pandas中,是否有任何方法可以替换值?

您可以使用df.replace('pre','post')另一个值并将其替换,但是如果要替换为None值,则无法完成此操作,如果尝试使用该值,则会得到奇怪的结果。

所以这是一个例子:

df = DataFrame(['-',3,2,5,1,-5,-1,'-',9])
df.replace('-', 0)

返回成功的结果。

但,

df.replace('-', None)

返回以下结果:

0
0   - // this isn't replaced
1   3
2   2
3   5
4   1
5  -5
6  -1
7  -1 // this is changed to `-1`...
8   9

为什么会返回如此奇怪的结果?

由于我想将此数据框倒入MySQL数据库,因此我不能将NaN值放入数据框的任何元素中,而是要放置None。当然,您可以先更改'-'NaN,然后再转换NaNNone,但是我想知道为什么数据框以这种可怕的方式起作用。

已在Python 2.7和OS X 10.8的pandas 0.12.0开发人员上进行了测试。Python是OS X上的预装版本,我通过使用SciPy
Superpack脚本安装了熊猫,以供参考。

关注者
0
被浏览
165
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    实际上,在更高版本的熊猫中,这将产生TypeError:

    df.replace('-', None)
    TypeError: If "to_replace" and "value" are both None then regex must be a mapping
    

    您可以通过传递列表或字典来实现:

    In [11]: df.replace('-', df.replace(['-'], [None]) # or .replace('-', {0: None})
    Out[11]:
          0
    0  None
    1     3
    2     2
    3     5
    4     1
    5    -5
    6    -1
    7  None
    8     9
    

    但我建议使用NaN而不是使用None:

    In [12]: df.replace('-', np.nan)
    Out[12]:
         0
    0  NaN
    1    3
    2    2
    3    5
    4    1
    5   -5
    6   -1
    7  NaN
    8    9
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看