【问题标题】:how to replace values of selected row of a column in panda's dataframe?如何替换熊猫数据框中列的选定行的值?
【发布时间】:2018-06-05 19:20:32
【问题描述】:

我有 12 列的训练数据集。

我想根据 Pclass 列的值 1 选择 Cabin 列行。 然后将 Cabin 列的选定行的值替换为 1。

我做了以下代码,但它用 1 替换了机舱列的所有值,甚至将 NaN 值替换为 1。我如何只替换选定的行?

train['Cabin'] =train[train['Pclass']==1]['Cabin']=1

【问题讨论】:

    标签: python pandas machine-learning anaconda


    【解决方案1】:

    您可以直接过滤要更改的行并将值分配给它,而不是过滤、替换然后分配给数据框。

    所以

    train['Cabin'] =train[train['Pclass']==1]['Cabin']=1
    

    变成

    train['Cabin'][train['Pclass']==1] = 1
    

    【讨论】:

      【解决方案2】:

      您可以通过loc 选择列Cabin 的条件行并设置为标量:

      train.loc[train['Pclass'] == 1, 'Cabin'] = 1
      

      并且您的代码将所有值替换为1,因为它与以下内容相同:

      train['Cabin'] = 1
      

      示例

      train = pd.DataFrame({'Pclass':[1,2,3,1,2],
                            'Cabin':[10,20,30,40,50]})
      print (train)
         Cabin  Pclass
      0     10       1
      1     20       2
      2     30       3
      3     40       1
      4     50       2
      
      train.loc[train['Pclass'] == 1, 'Cabin'] = 1
      print (train)
         Cabin  Pclass
      0      1       1
      1     20       2
      2     30       3
      3      1       1
      4     50       2
      

      【讨论】:

      • 如果您要分配的值(本例中为 1)不是常量怎么办?我有一个案例,使用此处的变量可以转换为if Pclass < 3, then Cabin = 2*Pclass 之类的内容。我试过train.loc[train['Pclass'] < 3, 'Cabin'] = train.loc[train['Pclass'] < 3, 'Pclass']*2,但我既没有得到结果也没有得到错误......
      • @AstroFloyd - 代码看起来不错,应该运行良好。
      • @AstroFloyd - 测试和工作对我来说很好。
      • 也许我在从我的情况到你的例子的翻译中犯了一个错误。我找到了使用pandas.DataFrame.where() 方法的解决方案。
      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 2022-01-11
      • 2022-06-24
      • 2019-02-02
      • 2020-04-25
      • 2018-08-16
      • 1970-01-01
      相关资源
      最近更新 更多