熊猫:在datetime datetime64 [ns]上连接两个表失败

时间:2019-05-04 14:31:00

标签: python pandas join python-3.7

有人知道为什么如果将那些相同的列设置为索引,在datetime64[ns]上的联接却不起作用吗?这真的很奇怪,感觉像是个错误,或者有什么解释吗?

df1 = pd.DataFrame({
    "a": [1,2,3],
    "t": pd.to_datetime([1556979766, 1556979767, 1556979768], unit="s")
})
df2 = pd.DataFrame({
    "b": [5,3,3],
    "t": pd.to_datetime([1556979766, 1556979767, 1556979768], unit="s")
})
df1.join(df2, on="t")

>> ValueError: You are trying to merge on datetime64[ns] and int64 columns. If you wish to proceed you should use pd.concat

这可行:

df1.index = df1.t
df2.index = df2.t
df1.join(df2, lsuffix="1")

dtypes相同

list(df1.dtypes) == list(df2.dtypes)
>> True

(熊猫版本:'0.24.2'

1 个答案:

答案 0 :(得分:1)

如@perl所建议,key: name_1 -> [ 0BA7,0BA7], [512.0,64.0] key: name_2 -> [ 0C93,0CFF], [512.0,64.0] key: name_3 -> [ 0F4F,0F51,0F53], [16.2,16.0,16.0] 将尝试将key: name_1 -> [ key[0BA7]->512.0, key[0BA7]->64.0] ... key: name_3 -> [ key[0F4F]->16.2, key[0F51]->16.0, key[0F53]->16.0] df1.join(df2, on='t')匹配,在这种情况下为df1.t。解决此问题的另一种方法是

df2.index

或使用int64。您可以在其中指定要在两边使用的列。

df1.join(df2.set_index('t'), on='t')