【问题标题】:Merging pandas dataframes using date as index使用日期作为索引合并熊猫数据框
【发布时间】:2014-06-10 11:25:33
【问题描述】:

我正在尝试合并两个不同长度的数据帧(称为 df1 和 df2),它们都按日期索引。较长的 dfs (df1) 具有在两者中较短的 (df2) 中列出的所有日期。我尝试使用以下命令将它们组合起来:merged = df2.merge(df1, on='Date'),但是当我尝试这样做时,我得到了以下我不明白的错误。

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-47-e8d3e1ec920d> in <module>()
----> 1 merged = df2.merge(df1, on='Date')

/usr/lib/python2.7/dist-packages/pandas/core/frame.pyc in merge(self, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy)
  3630                      left_on=left_on, right_on=right_on,
  3631                      left_index=left_index, right_index=right_index, sort=sort,
-> 3632                      suffixes=suffixes, copy=copy)
  3633 
  3634     #----------------------------------------------------------------------

/usr/lib/python2.7/dist-packages/pandas/tools/merge.pyc in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy)
    37                          right_on=right_on, left_index=left_index,
    38                          right_index=right_index, sort=sort, suffixes=suffixes,
---> 39                          copy=copy)
    40     return op.get_result()
    41 if __debug__:

/usr/lib/python2.7/dist-packages/pandas/tools/merge.pyc in __init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy)
    181         (self.left_join_keys,
    182          self.right_join_keys,
--> 183          self.join_names) = self._get_merge_keys()
    184 
    185     def get_result(self):

/usr/lib/python2.7/dist-packages/pandas/tools/merge.pyc in _get_merge_keys(self)
    324                 else:
    325                     if not is_rkey(rk):
--> 326                         right_keys.append(right[rk].values)
    327                         if lk == rk:
    328                             # avoid key upcast in corner case (length-0)

/usr/lib/python2.7/dist-packages/pandas/core/frame.pyc in __getitem__(self, key)
  1656             return self._getitem_multilevel(key)
  1657         else:
-> 1658             return self._getitem_column(key)
  1659 
  1660     def _getitem_column(self, key):

/usr/lib/python2.7/dist-packages/pandas/core/frame.pyc in _getitem_column(self, key)
  1663         # get column
  1664         if self.columns.is_unique:
-> 1665             return self._get_item_cache(key)
  1666 
  1667         # duplicate columns & possible reduce dimensionaility

/usr/lib/python2.7/dist-packages/pandas/core/generic.pyc in _get_item_cache(self, item)
  1003         res = cache.get(item)
  1004         if res is None:
-> 1005             values = self._data.get(item)
  1006             res = self._box_item_values(item, values)
  1007             cache[item] = res

/usr/lib/python2.7/dist-packages/pandas/core/internals.pyc in get(self, item)
  2872                 return self.get_for_nan_indexer(indexer)
  2873 
-> 2874             _, block = self._find_block(item)
  2875             return block.get(item)
  2876         else:

/usr/lib/python2.7/dist-packages/pandas/core/internals.pyc in _find_block(self, item)
  3184 
  3185     def _find_block(self, item):
-> 3186         self._check_have(item)
  3187         for i, block in enumerate(self.blocks):
  3188             if item in block:

/usr/lib/python2.7/dist-packages/pandas/core/internals.pyc in _check_have(self, item)
  3191     def _check_have(self, item):
  3192         if item not in self.items:
-> 3193             raise KeyError('no item named %s' % com.pprint_thing(item))
  3194 
  3195     def reindex_axis(self, new_axis, indexer=None, method=None, axis=0,

KeyError: u'no item named Date'

我也尝试删除on='Date',因为两者都已按日期编入索引,但结果似乎相同。知道我哪里可能出错了吗?

【问题讨论】:

  • 使用join而不是merge;它默认合并索引。
  • @KarlD。感谢您的回复!所以如果我理解正确的话,它应该是这样的:merged = df2.join(df1)?
  • @KarlD。我试了一下,得到了these errors。不幸的是,我不知道它们的含义。
  • 我的建议是您打印出部分实际数据帧并打印出您的df1.info()df2.info(),以便我们更好地了解实际情况。
  • 查看您的错误消息,您似乎有重叠的列名;添加类似rsuffix='_y' 的选项加入。

标签: python merge pandas dataframe


【解决方案1】:

我认为使用join 是最自然的,因为它默认合并索引。所以类似于以下内容:

merged = df2.join(df1,rsuffix='_y')

添加rsuffix='_y',因为您在两个数据框中都有共同的列名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 2019-03-18
    • 2016-12-08
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2020-10-31
    相关资源
    最近更新 更多