Панды: объединение двух таблиц в datetime datetime64 [ns] завершается неудачно - PullRequest
1 голос
/ 04 мая 2019

Кто-нибудь знает, почему присоединение к 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 Ответ

1 голос
/ 04 мая 2019

Как и предположил @perl, df1.join(df2, on='t') попытается сопоставить df1.t с df2.index, в данном случае int64.Другой способ обойти это -

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

Или использовать merge.где вы можете указать, какие столбцы использовать с обеих сторон.

df1.merge(df2, left_on='t', right_on='t')
...