Объединение фреймов данных по дате и времени с помощью pd.merge невозможно

#python #pandas #dataframe

#python #панды #фрейм данных

Вопрос:

У меня есть 2 фрейма данных, которые мне нужно объединить. Оба имеют одинаковые даты. Мне нужно сравнить даты и добавить значения DF A в соответствующие строки DF B по дате и времени. Давайте посмотрим на фреймы данных:

df[«Дата»]:

 2013    2016-06-06
2174    2016-06-07
1432    2016-06-08
2035    2016-06-09
278     2016-06-10
2250    2016-06-11
908     2016-06-12
702     2016-06-13
1982    2016-06-14
630     2016-06-15
Name: Date, Length: 81, dtype: object
  

запасы [«Дата»]

 47   2016-06-02
48   2016-06-03
49   2016-06-06
50   2016-06-07
51   2016-06-08
52   2016-06-09
53   2016-06-10
54   2016-06-13
55   2016-06-14
56   2016-06-15
Name: Date, dtype: datetime64[ns]
  

Когда я пытаюсь объединить фреймы данных с помощью:

 df.merge(stocks, left_on='Date', right_on='Date')
  

Я получаю следующую ошибку:

 Traceback (most recent call last):
  File "/anaconda3/envs/py35thesis/lib/python3.5/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-72-f2ca0c92995e>", line 1, in <module>
    df.merge(stocks, left_on='Date', right_on='Date')
  File "/anaconda3/envs/py35thesis/lib/python3.5/site-packages/pandas/core/frame.py", line 6379, in merge
    copy=copy, indicator=indicator, validate=validate)
  File "/anaconda3/envs/py35thesis/lib/python3.5/site-packages/pandas/core/reshape/merge.py", line 60, in merge
    validate=validate)
  File "/anaconda3/envs/py35thesis/lib/python3.5/site-packages/pandas/core/reshape/merge.py", line 554, in __init__
    self._maybe_coerce_merge_keys()
  File "/anaconda3/envs/py35thesis/lib/python3.5/site-packages/pandas/core/reshape/merge.py", line 984, in _maybe_coerce_merge_keys
    raise ValueError(msg)
ValueError: You are trying to merge on object and datetime64[ns] columns. If you wish to proceed you should use pd.concat
  

Комментарии:

1. Это разные dtypes — сначала используется ‘object’ и ‘datetime’ df["Date"] = pd.to_datetime(df["Date"])

Ответ №1:

Вы можете создать оба столбца в .type(str), а затем попытаться объединить два фрейма данных, в этом случае оба столбца будут одного типа.