【发布时间】:2015-09-09 21:29:36
【问题描述】:
我正在提取 30 天的历史数据并对其进行修改。
希望我可以阅读历史数据并让它参考 30 天的动态滚动日期。 “日期时间”值是原始数据中的一列。
df_new = df = pd.read_csv(loc+filename)
max_date = df_new['DateTime'].max()
date_range = max_date - Timedelta(30, unit='d')
df_old = pd.read_hdf(loc+filename,'TableName', where = [('max_date > date_range')])
然后我会读取新数据,它是一个单独的文件,始终是本月至今的值(例如,整个六月,这个文件每天都会被最新数据替换),并将它们连接到旧数据框。
frames = [df_old, df_new]
df = pd.concat(frames)
然后我对文件做一些事情(我正在检查某些值是否在 30 天的窗口内重复,如果它们重复,那么我在列中放置一个时间戳)。
现在我想将修改后的数据添加回我的原始文件(它是 HDF5,但也可以是 .sqlite 文件),名为 df_old。当然,由于我正在阅读前 30 天的数据和 MTD 数据,因此存在大量重复数据。我该如何管理?
我唯一的解决方案是读取整个文件(df_old 以及我添加的新数据),然后删除重复项,然后再次覆盖它。这不是很有效。
.sqlite 或 .hdf 格式可以强制不重复吗?如果是这样,那么我有 3 列标识一个唯一值(日期、EmpID、CustomerID)。我不想要完全重复的行。
【问题讨论】:
-
你见过插入还是忽略? (sqlite.org/lang_insert.html) 请注意,与其关闭唯一元组(Date、EmpID、CustomerID),不如在 Sqlite 表中需要一个唯一键列或者可能只是一个整数主键。