有人知道为什么如果将那些相同的列设置为索引,在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'
)
答案 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')