当前位置: 首页 > 面试题库 >

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

孙梓
2023-03-14
问题内容

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脚本安装了熊猫,以供参考。


问题答案:

实际上,在更高版本的熊猫中,这将产生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


 类似资料:
  • 问题内容: 假设我有一个带有 的DataFrame : 我需要做的是用上方的同一列中NaN的第一个非NaN值替换每个值。假设第一行永远不会包含NaN。因此,对于前面的示例,结果将是 我可以遍历整个DataFrame的逐列,逐元素并直接设置值,但是是否有一种简单的方法(最佳无循环方法)来实现这一点? 问题答案: 你可以在上使用该方法,并将该方法指定为ffill(正向填充): 这个方法 将上一个有效观

  • 问题内容: 我在MySQL中的运算结果中得到了价值。 有没有办法将这些值转换为值0? 问题答案: 是的,使用。 COALESCE遍历您提供的值列表,并返回第一个非空值。

  • 你好,我经常需要在代码中使用,但我知道这是一个非常繁重的操作。由于我正在努力提高性能,我想知道删除所有调用的方法是否有效。 我使用的是,但是由于这种方法对于大型数据集可能会有很大的问题,所以我想使用这个解决方案: 我所做的不是创建类型对(Int,Int)的RDD,而是创建类型对(Int,list[Int]),所以我的如下所示 你认为有没有更快的方法来达到同样的结果,使用一些其他的方法?谢谢你。

  • 也许可以在某个配置文件中完成。有人已经做过了吗?

  • 问题内容: 我有一个这样的Pandas DataFrame: 我只想在值等于0的情况下用第二列()中的值替换值,然后(对于剩余的零值),再次使用第三列()进行替换。期望的结果是下一个: 我使用该函数完成了此操作,但它似乎太慢了。我认为这一定是一种更快的方法。 使用其他功能而不是该功能,有没有更快的方法呢? 问题答案: 使用起来更快。使用与您使用类似的模式: 但是,使用嵌套稍微快一点: 时机 使用以

  • 问题内容: 所以我似乎无法弄清楚…我有一句话要说,我希望它成为。我已经尝试了以下所有方法,但似乎都没有效果; 我真的不明白为什么最后一个有效,因为这样可以正常工作: 我在这里想念什么吗? 编辑 我知道\是转义字符。我要在这里执行的操作是将所有内容都 转换为其他内容, 并且替换似乎没有按照我的预期进行。 我希望字符串a看起来像字符串b。但是替换并不能像我想的那样替换斜线。 问题答案: 无需为此使用r