Python 使用日期作为索引合并数据帧

Python 使用日期作为索引合并数据帧,python,merge,pandas,dataframe,Python,Merge,Pandas,Dataframe,我正在尝试合并两个不同长度的数据帧(称为df1和df2),这两个数据帧都按日期索引。dfs(df1)中较长的一个具有两个(df2)中较短的一个中列出的所有日期。我尝试使用以下命令将它们组合起来:merged=df2.merge(df1,on='Date'),但是我在尝试这样做时遇到了以下错误,我不理解 --------------------------------------------------------------------------- KeyError

我正在尝试合并两个不同长度的数据帧(称为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'
---------------------------------------------------------------------------
KeyError回溯(最近一次呼叫最后一次)
在()
---->1 merged=df2.merge(df1,on='Date')
/合并中的usr/lib/python2.7/dist-packages/pandas/core/frame.pyc(self、right、how、on、left_-on、right_-on、left_-index、right_-index、sort、后缀、copy)
3630左开=左开,右开=右开,
3631左索引=左索引,右索引=右索引,排序=排序,
->3632后缀=后缀,复制=复制)
3633
3634     #----------------------------------------------------------------------
/合并中的usr/lib/python2.7/dist-packages/pandas/tools/merge.pyc(左、右、如何、开、左、右、左索引、右索引、排序、后缀、副本)
37右上=右上,左索引=左索引,
38右索引=右索引,排序=排序,后缀=后缀,
--->39副本=副本)
40返回操作获取结果()
41如果调试:
/usr/lib/python2.7/dist-packages/pandas/tools/merge.pyc in_uuuuuinit_uuu(self、left、right、how、on、left_uon、right_uon、axis、left_index、right_uindex、sort、后缀、copy)
181(自左键),
182自动右键连接键,
-->183 self.join\u names)=self.\u get\u merge\u keys()
184
185 def get_结果(自身):
/usr/lib/python2.7/dist-packages/pandas/tools/merge.pyc in_get_merge_keys(self)
324其他:
325如果不是rkey(rk):
-->326右键。追加(右[rk]。值)
327如果lk==rk:
328#避免在角盒中向上投射钥匙(长度-0)
/usr/lib/python2.7/dist-packages/pandas/core/frame.pyc in_u_获取项目(self,key)
1656返回自我。\u获取项目\u多级(键)
1657其他:
->1658返回自我。\u获取项目\u列(键)
1659
1660 def _getitem_列(自身,键):
/usr/lib/python2.7/dist-packages/pandas/core/frame.pyc在_getitem_列中(self,key)
1663#获取列
1664如果self.columns.u是唯一的:
->1665返回自。\u获取\u项目\u缓存(密钥)
1666
1667#重复列和可能的降维
/缓存中的usr/lib/python2.7/dist-packages/pandas/core/generic.pyc(self,item)
1003 res=cache.get(项)
1004如果res为无:
->1005值=自身数据获取(项目)
1006 res=自身。\框\项\值(项,值)
1007缓存[项目]=res
/get中的usr/lib/python2.7/dist-packages/pandas/core/internals.pyc(self,item)
2872返回self.get\u for\u nan\u索引器(索引器)
2873
->2874块=自身。查找块(项目)
2875返回块。获取(项目)
2876其他:
/usr/lib/python2.7/dist-packages/pandas/core/internals.pyc in_find_block(self,item)
3184
3185 def查找块(自身,项目):
->3186自我检查(项目)
3187对于i,枚举中的块(self.blocks):
3188如果块中的项目:
/usr/lib/python2.7/dist-packages/pandas/core/internals.pyc in\u check\u have(self,item)
3191 def检查(自身、项目):
3192如果项目不在self.items中:
->3193 raise KeyError('没有名为%s的项目'%com.pprint\u thing(项目))
3194
3195 def reindex_轴(自身、新_轴、索引器=无、方法=无、轴=0、,
KeyError:u'没有指定日期的项目'

我还尝试在class='Date'上删除
,因为两者都已按日期编制索引,但结果似乎相同。是否知道我可能会出错?

我认为最自然的做法是使用
连接,因为默认情况下它会在索引上合并。因此,类似于以下内容:

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

添加
rsuffix=''u y'
,因为两个数据帧中都有相同的列名。

使用
join
而不是
merge
;默认情况下它会在索引上合并。@KarlD。感谢您的响应!如果我理解正确,它应该是这样的:
merged=df2.join(df1)
?@KarlD。我尝试了一下,得到了。不幸的是,我不知道它们意味着什么。我的建议是打印出部分实际数据帧,然后打印出
df1.info()
df2.info()
这样我们可以更好地了解实际情况。查看错误消息,您的列名似乎重叠;添加类似于
rsuffix=''y'
的选项以加入。