我有两个DataFrames
(带有DatetimeIndex
),并想用第二个帧(较新的)中的数据更新第一个帧(较旧的)。
新框架可能包含旧框架中已经包含的行的最新数据。在这种情况下,旧框架中的数据应被新框架中的数据覆盖。同样,较新的框架可能比第一个框架具有更多的列/行。在这种情况下,旧帧应被新帧中的数据放大。
熊猫文档指出,
“.loc/.ix/[]
为该轴设置不存在的键时,操作可以执行放大”
和
“ DataFrame可以通过.loc
“
但是,这似乎不起作用,并引发了KeyError
。例:
In [195]: df1
Out[195]:
A B C
2015-07-09 12:00:00 1 1 1
2015-07-09 13:00:00 1 1 1
2015-07-09 14:00:00 1 1 1
2015-07-09 15:00:00 1 1 1
In [196]: df2
Out[196]:
A B C D
2015-07-09 14:00:00 2 2 2 2
2015-07-09 15:00:00 2 2 2 2
2015-07-09 16:00:00 2 2 2 2
2015-07-09 17:00:00 2 2 2 2
In [197]: df1.loc[df2.index] = df2
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-197-74e630e87cf8> in <module>()
----> 1 df1.loc[df2.index] = df2
/.../pandas/core/indexing.pyc in __setitem__(self, key, value)
112
113 def __setitem__(self, key, value):
--> 114 indexer = self._get_setitem_indexer(key)
115 self._setitem_with_indexer(indexer, value)
116
/.../pandas/core/indexing.pyc in _get_setitem_indexer(self, key)
107
108 try:
--> 109 return self._convert_to_indexer(key, is_setter=True)
110 except TypeError:
111 raise IndexingError(key)
/.../pandas/core/indexing.pyc in _convert_to_indexer(self, obj, axis, is_setter)
1110 mask = check == -1
1111 if mask.any():
-> 1112 raise KeyError('%s not in index' % objarr[mask])
1113
1114 return _values_from_object(indexer)
KeyError: "['2015-07-09T18:00:00.000000000+0200' '2015-07-09T19:00:00.000000000+0200'] not in index"
最好的方法(就性能而言,因为我的实际数据要大得多)是什么,两种方法都可以实现所需的更新和扩大的DataFrame。这是我希望看到的结果:
A B C D
2015-07-09 12:00:00 1 1 1 NaN
2015-07-09 13:00:00 1 1 1 NaN
2015-07-09 14:00:00 2 2 2 2
2015-07-09 15:00:00 2 2 2 2
2015-07-09 16:00:00 2 2 2 2
2015-07-09 17:00:00 2 2 2 2
df2.combine_first(df1)
(文档)似乎可以满足您的要求;PFB代码段和输出
import pandas as pd
print 'pandas-version: ', pd.__version__
df1 = pd.DataFrame.from_records([('2015-07-09 12:00:00',1,1,1),
('2015-07-09 13:00:00',1,1,1),
('2015-07-09 14:00:00',1,1,1),
('2015-07-09 15:00:00',1,1,1)],
columns=['Dt', 'A', 'B', 'C']).set_index('Dt')
# print df1
df2 = pd.DataFrame.from_records([('2015-07-09 14:00:00',2,2,2,2),
('2015-07-09 15:00:00',2,2,2,2),
('2015-07-09 16:00:00',2,2,2,2),
('2015-07-09 17:00:00',2,2,2,2),],
columns=['Dt', 'A', 'B', 'C', 'D']).set_index('Dt')
res_combine1st = df2.combine_first(df1)
print res_combine1st
pandas-version: 0.15.2
A B C D
Dt
2015-07-09 12:00:00 1 1 1 NaN
2015-07-09 13:00:00 1 1 1 NaN
2015-07-09 14:00:00 2 2 2 2
2015-07-09 15:00:00 2 2 2 2
2015-07-09 16:00:00 2 2 2 2
2015-07-09 17:00:00 2 2 2 2
问题内容: 我正在尝试设置pandas DataFrame列的最大值。例如: 将产生: 但事实并非如此。 有上百万种解决方案可以 找到 最大值,但是没有什么可以 设置 最大值的……至少我能找到。 我可以遍历列表,但我怀疑有一种更快的方法可以处理大熊猫。我的列表将明显更长,因此我希望迭代花费相对较长的时间。另外,我希望能使用任何解决方案。 问题答案: 我想你可以做: 要么:
问题内容: 我正在从R过渡到Python。我刚开始使用熊猫。我有一个很好的子集的R代码: 现在,我想在Python中做类似的事情。到目前为止,这是我得到的: 我开始感到自己在以错误的方式这样做。也许,有一个优雅的解决方案。有人可以帮忙吗?我需要从我拥有的时间戳中提取月份和年份并进行子设置。也许有一条线可以完成所有这一切: 谢谢。 问题答案: 我将假设和是中的列, 是的实例,而其他变量是标量值: 现
带有地牢像素风格的挂机游戏,内涵网络部分
从0.13版本开始,可以通过引用尚未在数据帧中的. loc或. ix中的索引来追加到数据帧。看到留档。 那么我就不明白为什么这条线失败了: 这将生成ValueError: 这里是所有的治疗方法。形状=(53,12),,,,。 在这里设置放大的正确方法是什么?
我开始制作一个mandelbrot集分形查看器。在放大分形时,我遇到了很多问题。如果您尝试缩放,查看器将刚好靠近中心。我已经尽我所能去理解这个困境。我怎样才能放大我的分形,当我放大时,它会放大屏幕的中心,而不是分形的中心?
VR播放设置需账号开通VR播放权限,开通权限后账号可以通过全局设置和分类设置控制视频是否为VR(全景)播放。 全局设置 进入视频页面,在全局设置页面,点击VR播放按钮 全局设置VR播放为“ON”时,默认所有分类下的视频为VR播放;全局设置VR播放为“OFF”时,默认所有分类下的视频为非VR播放。 分类设置 若需对某一级分类进行VR播放开关设置,可以选择【分类管理】,在一级分类后 “操作”中的“设置