【发布时间】:2019-05-04 14:31:00
【问题描述】:
有谁知道为什么加入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')
【问题讨论】:
-
你试过
df1.merge(df2, how='inner', on='t')吗? -
@aws_apprentice 一样,我认为方法无关紧要,因为它会首先评估导致错误的语句!
-
@meow:我认为这只是
join的工作方式:on参数仅指 caller DataFrame。以下是关于on的文档:调用者 中的列或索引级别名称加入其他 中的索引,否则加入索引上的索引。所以它试图通过df1的t列和df2的索引加入,导致类型不匹配 -
pd.merge(df1, df2, on='t')应该在这里工作 -
@perl 谢谢这是有道理的,我假设它会在两个数据帧的指定列上加入它。
标签: python pandas join python-3.7