【问题标题】:Python Pandas: np.searchsorted() returns wrong index valuePython Pandas:np.searchsorted() 返回错误的索引值
【发布时间】:2020-06-24 12:01:18
【问题描述】:

我有两个数据框。一个数据框 (df1) 有 75799 行,另一个数据框 (df2) 有 13715 行。

df1

OBJECTID    ENABLED DATECREATED        DATEMODIFIED        OWNER    STATUS  ACCURACY  INSTALLATIONDATE
 

      2            1    23/08/2001 0:00:00  3/04/2020 0:00:00   ABC In Service  Unknown     26/09/1969 0:00:00
      8            1    23/08/2001 0:00:00  3/04/2020 0:00:00   ABC In Service  Unknown     23/08/1989 0:00:00
      12           1    23/08/2001 0:00:00  3/04/2020 0:00:00   ABC In Service  Unknown     13/04/1971 0:00:00      
      19           1    23/08/2001 0:00:00  3/04/2020 0:00:00   ABC In Service  Unknown     22/03/1976 0:00:00

df2:

OBJECTID    FID_OHElectricLineSegment_2k    ENABLED   DATECREATED         DATEMODIFIED    OWNER 
1                  19                        1       23/08/2001 0:00:00 3/04/2020 0:00:00   AUR
2                  41                        1       23/08/2001 0:00:00 2/04/2020 0:00:00   AUR
3                  98                        1       23/08/2001 0:00:00 3/04/2020 0:00:00   CONS
4                  167                       1       23/08/2001 0:00:00 3/04/2020 0:00:00   CONS

我将 df1 的 OBJECTID 与 df2 的 FID_OHElectricLineSegment_2k 进行比较,并在 df1 'zone' 列中创建一个新列,如果两列具有相同的值,则插入值 1。这是我的做法:

df1.loc[np.searchsorted(df1['OBJECTID'].values,df2['FID_OHElectricLineSegment_2k'].values),'Zone']=1

但是,它返回一个错误

KeyError: '[75799] not in index'

我可以理解 df1 的总行数为 75799(0 到 75798),但是我不明白 np.searchsorted() 是如何返回不存在的索引值的。谁能帮助我我在哪里犯了错误?

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    loc更改为iloc,因为np.searchsorted返回位置

    idx=np.searchsorted(df1['OBJECTID'].values,df2['FID_OHElectricLineSegment_2k'].values)
    idx=np.clip(idx,a_max=len(df)-1,a_min=0)    
    df1.iloc[idx,'Zone']=1
    

    【讨论】:

    • 我已经尝试过抛出 IndexError: positional indexers are out-of-bounds message
    • @user2293224 这里的问题是因为当你的值大于 df1 时,它会附加到末尾,所以长度超出范围
    • 感谢您的努力。使用更新的代码,它会抛出 ValueError: Can only index by location with a [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array]。我试图搜索这个错误但无法得到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多