【问题标题】:Replacing values in one column with values in another column将一列中的值替换为另一列中的值
【发布时间】:2019-03-28 03:55:58
【问题描述】:

我导入了一个数据集,但“血小板”列中的一些值被添加到了一个名为“X”的新列中,而“血小板”列的位置则为 NaN。

我想遍历血小板列中的每个条目,当我达到 NaN 值时,我想用“X”列中的任何值替换该值。这是我在下面尝试的(类似的东西在 R 中效果很好)。

我不知道我做错了什么。我收到一条错误消息:

TypeError                                Traceback (most recent call last)

< ipython-input-2520-414f4874fae7 > in  < module >()

  3 import math

  4 

----> 5 for i in range(0, N-1):

  6     if math.isnan(data['platelet'][i]):

  7         data['platelet'][i] = data['X'][i]

TypeError: 'Series' object is not callable

N = len(data['platelet'])

import math  


for i in range(0, N-1):  

    if math.isnan(data['platelet'][i]):  

        data['platelet'][i] = data['X'][i]  

【问题讨论】:

  • 请给我们完整的错误。这看起来不像完整的代码。
  • 好的,我填写了整个错误,但我认为那里没有其他有用的东西。
  • 提示:如果范围从零开始,可以省略0值。 ;)
  • 可以添加数据框初始化吗?测试代码会更容易。至少 2 行。
  • 只是猜测,因为导致此问题的代码不在这里,您在上面使用了range 作为变量,现在您尝试将其作为函数调用。

标签: python loops replace


【解决方案1】:

只需使用 fillna 方法即可:

data['platelet'] = data['platelet'].fillna(data['X'])

这将用 X 列中的相应值填充 data['platelet'] 中的 NA 值。

【讨论】:

    【解决方案2】:

    很可能与您的数据有关,因为当我模拟您的场景时,它运行良好。

    尝试在迭代之前和迭代之间添加数据的打印语句。

    还需要将for i in range(0, N-1): 更改为for i in range(N):。使用N-1 将跳过最后一次迭代。 0 也不需要。

    data = {}
    data['platelet'] = [float('nan'),float('nan'),float('nan'),float('nan'),float('nan')]
    data['X'] = [1,2,3,4,5]
    
    N = len(data['platelet'])
    
    import math  
    
    for i in range(N):
        if math.isnan(data['platelet'][i]):
            data['platelet'][i] = data['X'][i]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-13
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 2022-01-13
      相关资源
      最近更新 更多