【问题标题】:TypeError: searchsorted requires compatible dtype or scalar, not ndarray (Pandas)TypeError: searchsorted 需要兼容的 dtype 或标量,而不是 ndarray (Pandas)
【发布时间】:2020-09-07 06:44:29
【问题描述】:

我无法在日期时间索引上应用 searchsorted 而不会出现错误:

df.index.searchsorted(pd.Series(np.array([df.index[0], df.index.max()])))

>>>TypeError: searchsorted requires compatible dtype or scalar, not ndarray

样本数据:

x = ['1998-01-07 13:17:00', '1998-01-07 13:18:00', '1998-01-07 13:19:00', '1998-01-07 13:20:00',
     '1998-01-07 13:21:00', '1998-01-07 13:22:00', '1998-01-07 13:23:00', '1998-01-07 13:24:00',
     '1998-01-07 13:25:00', '1998-01-07 13:26:00']
df = pd.DataFrame(x)
df.set_index(df.iloc[:, 0], inplace=True)
df.index = pd.DatetimeIndex(df.index.values)


df.index.searchsorted(pd.Series(np.array([df.index[0], df.index.max()])))

为什么它不起作用? (听说是bug修复了,但不知何故它仍然存在)

我怎样才能让它工作?

我需要在多处理函数中应用这一行,它需要高效。

【问题讨论】:

    标签: python pandas dataframe search typeerror


    【解决方案1】:

    如错误所述,您将ndarray 传递给与df.index 系列不兼容的pandas.Series.searchsorted(),该系列的数据类型为pandas.DatetimeIndex。因此,要解决这个问题,您需要像这样调整给定系列的类型:

    # just change this line
    print(df.index.searchsorted(pd.DatetimeIndex([df.index[0], df.index.max()])))
    # prints: [0, 9]
    
    

    【讨论】:

    • “TypeError: searchsorted 需要兼容的 dtype 或标量,而不是列表”,我做错了什么?
    • 您可能忘记将此列表转换为pd.DatetimeIndex。你能照原样复制我的代码吗?它对我有用,没有问题
    • 谢谢,兄弟...很高兴我能帮上忙 :)
    猜你喜欢
    • 2023-03-07
    • 2019-12-30
    • 2023-03-27
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多