Python 如何根据数据帧中不连续的索引列表替换值?

Python 如何根据数据帧中不连续的索引列表替换值?,python,pandas,replace,Python,Pandas,Replace,我一直在寻找一种快速有效的方法,仅当相应的索引属于非连续数字列表时,才替换数据帧给定列中的值。 假设非连续的索引列表=[14006571452668420,…]具有大约30k个不同的值 我已尝试使用.iloc,但收到一条错误消息: df.iloc[non_consecutive_indices_list, 'column'] = New_Value ValueError:只能使用[integer,integer切片(包括起点,不包括终点)、整型列表、布尔数组]按位置索引 或者,我尝试了以下方

我一直在寻找一种快速有效的方法,仅当相应的索引属于非连续数字列表时,才替换数据帧给定列中的值。 假设非连续的索引列表=[14006571452668420,…]具有大约30k个不同的值

  • 我已尝试使用.iloc,但收到一条错误消息:

    df.iloc[non_consecutive_indices_list, 'column'] = New_Value
    
  • ValueError:只能使用[integer,integer切片(包括起点,不包括终点)、整型列表、布尔数组]按位置索引

  • 或者,我尝试了以下方法:

    df.iloc[non_consecutive_indices_list].column = New_Value
    
  • 但这将返回原始数据帧的副本,因此无法替换原始值

  • 最后,我尝试使用一个for循环,它是有效的,但这是非常低效的,需要永远替换大约30k的值:

    for i in non_consecutive_indices_list:
        df.loc[i, 'column'] = New_Value
    

  • 你知道如何以最快的方式完成吗?

    iloc
    更改为功能:

    df = pd.DataFrame({'column':list('abcdefghij')})
    
    non_consecutive_indices_list = [2,4,1,6]
    df.loc[non_consecutive_indices_list, 'column'] = 'New_Value'
    print (df)
          column
    0          a
    1  New_Value
    2  New_Value
    3          d
    4  New_Value
    5          f
    6  New_Value
    7          h
    8          i
    9          j
    

    iloc
    更改为
    loc
    类似
    df.loc[非连续索引列表,'column']=新值
    ?这很奇怪,因为您的例子中有“整数列表”。检查列表,可能您有一些非整数值。谢谢jezrael!您刚刚为我节省了未来数小时的修改时间!