存储为 Pandas DataFrames 并更新为 Pytables
Storing as Pandas DataFrames and Updating as Pytables
您可以将数据存储为 pandas HDFStore 并使用 pytables 打开它们/执行 i/o 吗?出现这个问题的原因是因为我目前将数据存储为
pd.HDFStore('Filename',mode='a')
store.append(data)
不过,据我了解pandas不太支持更新记录。我有一个用例,我必须每天更新 5% 的数据。 pd.io.pytables 行得通吗?如果是这样我没有找到关于这个的文件? Pytables 有很多文档,但是当我最初没有使用 pytables 保存文件时,我不确定是否可以在不使用 pytables 打开的情况下打开文件/更新?
以下是我认为您正在寻找的文档:
http://pandas.pydata.org/pandas-docs/version/0.19.0/api.html?highlight=pytables
另请参阅此主题:
Update pandas DataFrame in stored in a Pytable with another pandas DataFrame
看来您可以将 5% 的记录加载到内存中,从存储中删除它们,然后将更新的记录追加回来
替换整个table
store.remove(键,其中= ...)
store.append(.......)
您也可以在 Pandas 之外进行 - 请参阅此处有关删除的教程
下面是 的演示:
让我们生成一个测试 DF:
In [56]: df = pd.DataFrame(np.random.rand(15, 3), columns=list('abc'))
In [57]: df
Out[57]:
a b c
0 0.022079 0.901965 0.282529
1 0.596452 0.096204 0.197186
2 0.034127 0.992500 0.523114
3 0.659184 0.447355 0.246932
4 0.441517 0.853434 0.119602
5 0.779707 0.429574 0.744452
6 0.105255 0.934440 0.545421
7 0.216278 0.217386 0.282171
8 0.690729 0.052097 0.146705
9 0.828667 0.439608 0.091007
10 0.988435 0.326589 0.536904
11 0.687250 0.661912 0.318209
12 0.829129 0.758737 0.519068
13 0.500462 0.723528 0.026962
14 0.464162 0.364536 0.843899
并将其保存到 HDFStore(注意:不要忘记使用 data_columns=True
(或 data_columns=[list_of_columns_to_index]
)来索引我们要在 [=19= 中使用的所有列] 条款):
In [58]: store = pd.HDFStore(r'd:/temp/test_removal.h5')
In [59]: store.append('test', df, format='t', data_columns=True)
In [60]: store.close()
解法:
In [61]: store = pd.HDFStore(r'd:/temp/test_removal.h5')
.remove()
方法应该 return 删除的行数:
In [62]: store.remove('test', where="a > 0.5")
Out[62]: 9
让我们追加更改(乘以 100
)行:
In [63]: store.append('test', df.loc[df.a > 0.5] * 100, format='t', data_columns=True)
测试:
In [64]: store.select('test')
Out[64]:
a b c
0 0.022079 0.901965 0.282529
2 0.034127 0.992500 0.523114
4 0.441517 0.853434 0.119602
6 0.105255 0.934440 0.545421
7 0.216278 0.217386 0.282171
14 0.464162 0.364536 0.843899
1 59.645151 9.620415 19.718557
3 65.918421 44.735482 24.693160
5 77.970749 42.957446 74.445185
8 69.072948 5.209725 14.670545
9 82.866731 43.960848 9.100682
10 98.843540 32.658931 53.690360
11 68.725002 66.191215 31.820942
12 82.912937 75.873689 51.906795
13 50.046189 72.352794 2.696243
敲定:
In [65]: store.close()
您可以将数据存储为 pandas HDFStore 并使用 pytables 打开它们/执行 i/o 吗?出现这个问题的原因是因为我目前将数据存储为
pd.HDFStore('Filename',mode='a')
store.append(data)
不过,据我了解pandas不太支持更新记录。我有一个用例,我必须每天更新 5% 的数据。 pd.io.pytables 行得通吗?如果是这样我没有找到关于这个的文件? Pytables 有很多文档,但是当我最初没有使用 pytables 保存文件时,我不确定是否可以在不使用 pytables 打开的情况下打开文件/更新?
以下是我认为您正在寻找的文档:
http://pandas.pydata.org/pandas-docs/version/0.19.0/api.html?highlight=pytables
另请参阅此主题:
Update pandas DataFrame in stored in a Pytable with another pandas DataFrame
看来您可以将 5% 的记录加载到内存中,从存储中删除它们,然后将更新的记录追加回来
替换整个table
store.remove(键,其中= ...)
store.append(.......)
您也可以在 Pandas 之外进行 - 请参阅此处有关删除的教程
下面是
让我们生成一个测试 DF:
In [56]: df = pd.DataFrame(np.random.rand(15, 3), columns=list('abc'))
In [57]: df
Out[57]:
a b c
0 0.022079 0.901965 0.282529
1 0.596452 0.096204 0.197186
2 0.034127 0.992500 0.523114
3 0.659184 0.447355 0.246932
4 0.441517 0.853434 0.119602
5 0.779707 0.429574 0.744452
6 0.105255 0.934440 0.545421
7 0.216278 0.217386 0.282171
8 0.690729 0.052097 0.146705
9 0.828667 0.439608 0.091007
10 0.988435 0.326589 0.536904
11 0.687250 0.661912 0.318209
12 0.829129 0.758737 0.519068
13 0.500462 0.723528 0.026962
14 0.464162 0.364536 0.843899
并将其保存到 HDFStore(注意:不要忘记使用 data_columns=True
(或 data_columns=[list_of_columns_to_index]
)来索引我们要在 [=19= 中使用的所有列] 条款):
In [58]: store = pd.HDFStore(r'd:/temp/test_removal.h5')
In [59]: store.append('test', df, format='t', data_columns=True)
In [60]: store.close()
解法:
In [61]: store = pd.HDFStore(r'd:/temp/test_removal.h5')
.remove()
方法应该 return 删除的行数:
In [62]: store.remove('test', where="a > 0.5")
Out[62]: 9
让我们追加更改(乘以 100
)行:
In [63]: store.append('test', df.loc[df.a > 0.5] * 100, format='t', data_columns=True)
测试:
In [64]: store.select('test')
Out[64]:
a b c
0 0.022079 0.901965 0.282529
2 0.034127 0.992500 0.523114
4 0.441517 0.853434 0.119602
6 0.105255 0.934440 0.545421
7 0.216278 0.217386 0.282171
14 0.464162 0.364536 0.843899
1 59.645151 9.620415 19.718557
3 65.918421 44.735482 24.693160
5 77.970749 42.957446 74.445185
8 69.072948 5.209725 14.670545
9 82.866731 43.960848 9.100682
10 98.843540 32.658931 53.690360
11 68.725002 66.191215 31.820942
12 82.912937 75.873689 51.906795
13 50.046189 72.352794 2.696243
敲定:
In [65]: store.close()