【问题标题】:How to replace values according to non-consecutive list of indices in pandas dataframe?如何根据熊猫数据框中的非连续索引列表替换值?
【发布时间】:2018-07-05 16:04:12
【问题描述】:

我一直在寻找一种快速有效的方法来替换熊猫数据框给定列中的值,前提是相应的索引属于非连续数字列表。 用 ca 说 non_consecutive_indices_list = [1400, 6571, 14526, 68420, ...]。 30k 个不同的值。

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

    df.iloc[non_consecutive_indices_list, 'column'] = New_Value
    

ValueError: 只能使用 [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] 按位置索引。

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

    df.iloc[non_consecutive_indices_list].column = New_Value
    

但这会返回原始数据框的副本,因此我无法替换原始值。

  1. 最后,我尝试使用 for 循环,它可以工作,但效率非常低,并且需要永远替换大约 30k 值:

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

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

【问题讨论】:

  • 如何将iloc 更改为loc 就像df.loc[non_consecutive_indices_list, 'column'] = New_Value 一样?
  • 这很奇怪,因为在你的情况下你有'listlike of integers'。检查列表,可能你有一些非整数值。
  • 谢谢耶兹瑞尔!您刚刚为我节省了未来数小时的修改时间!

标签: python pandas replace


【解决方案1】:

iloc改成DataFrame.loc函数:

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

【讨论】:

    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 2020-10-21
    • 2017-07-23
    • 1970-01-01
    • 2023-03-12
    • 2021-12-12
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多