避免在hdf5或sqlite中重复数据

时间:2015-06-23 21:16:28

标签: python sqlite pandas hdf5

我需要30天的历史数据并对其进行修改。

希望我可以阅读历史数据并将其引用为30天的动态滚动日期。 ' DateTime' value是原始数据中的一列。

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')])

然后我会读取新数据,这是一个单独的文件,它始终是Month to Date值(例如,所有6月份,这个文件每天都会被最新数据替换),并将它们连接到旧的数据帧。

frames = [df_old, df_new]
df = pd.concat(frames)

然后我对文件做了一些事情(我正在检查某些值是否在30天内重复,如果他们这样做,那么我会在列中放置一个时间戳)。

现在我想将这个修改过的数据添加回原来的文件(它是HDF5,但也可能是.sqlite文件),名为df_old。当然,由于我正在阅读前30天的数据和MTD数据,因此有大量重复。我该如何管理?

我唯一的解决方案是读取整个文件(df_old以及我添加的新数据),然后删除重复项,然后再次覆盖它。这不是非常有效。

.sqlite或.hdf格式可以强制执行非重复吗?如果是这样,那么我有3列标识一个唯一值(Date,EmpID,CustomerID)。我不想要完全重复的行。

1 个答案:

答案 0 :(得分:2)

将它们定义为sqlite中的主键。它不会允许您拥有一组非唯一主键。

e.g。

CREATE TABLE table (
a INT,
b INT,
c INT,
PRIMARY KEY(a,b)
);

不允许您将a,b的重复项添加到数据中。然后用 INSERT OR IGNORE添加数据,任何重复项都将被忽略。

http://sqlite.org/lang_insert.html