gpt4 book ai didi

python - 使用 float 作为键时 pandas merge_asof 错误

转载 作者:行者123 更新时间:2023-12-01 09:00:18 25 4
gpt4 key购买 nike

当使用 pandas merge_asof 时,如下例所示

import pandas as pd

left = pd.DataFrame({'a': [1.1, 5.5, 10.9], 'left_val': ['a', 'b', 'c']})

right = pd.DataFrame({'a': [1.0, 2.8, 5.4, 5.55, 7.4], 'right_val': [1, 2, 3, 6, 7]})

pd.merge_asof(left, right, on='a', direction='nearest', tolerance=5)

我收到错误

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\reshape\merge.py in _get_merge_keys(self)
1363
1364 else:
-> 1365 raise MergeError("key must be integer or timestamp")
1366
1367 # validate allow_exact_matches

MergeError: key must be integer or timestamp

这看起来很奇怪,因为在我读过的文档中

on : label

Field name to join on. Must be found in both DataFrames. The data MUST be ordered. Furthermore this must be a numeric column, such as datetimelike, integer, or float. On or left_on/right_on must be given

所以使用 float 作为键应该没问题......

我使用的是 pandas 0.23.0

最佳答案

看起来容差参数仅允许用于整数和时间增量值,因此会出现错误,但没有则运行正常。

也许你可以通过后处理步骤来修复它:

right["b"] = right["a"]
df_result = pd.merge_asof(left, right, on='a', direction='nearest')
df_result.loc[abs(df_result["b"]-df_result["a"]) > 5, :] = np.nan
df_result.dropna()

这将按最近的方式合并它们,然后将连接高于您的容差(在本例中为 5)的所有行合并为空,然后您可以删除空行,就像根本不存在一样...

关于python - 使用 float 作为键时 pandas merge_asof 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52503816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com