Pandas HDFStore:省略重复项
Pandas HDFStore : Omitting Duplicates
我有一个 HDFStore,我每天晚上都在其中输入数据。我想知道如果系统崩溃等,我可能会重新 运行 进程,所以我想确保如果一行已经存在,那么 pandas 不会在下次进程 运行 时包含它。有没有办法查找重复项而不包含它们?
如果您的代码中有数据框,您仍然可以添加数据并应用到它:
.drop_duplicates()
这将从数据框中删除所有重复数据。
希望对您有所帮助
如果您的 HDFStore 中有唯一索引,您可以使用以下方法:
创建示例 DF:
In [34]: df = pd.DataFrame(np.random.rand(5,3), columns=list('abc'))
In [35]: df
Out[35]:
a b c
0 0.407144 0.972121 0.462502
1 0.044768 0.165924 0.852705
2 0.703686 0.156382 0.066925
3 0.912794 0.362916 0.866779
4 0.156249 0.625272 0.360799
将其保存到 HDFStore:
In [36]: store = pd.HDFStore(r'd:/temp/t.h5')
In [37]: store.append('test', df, format='t')
向我们的 DF 添加新行:
In [38]: df.loc[len(df)] = [-1, -1, -1]
In [39]: df
Out[39]:
a b c
0 0.407144 0.972121 0.462502
1 0.044768 0.165924 0.852705
2 0.703686 0.156382 0.066925
3 0.912794 0.362916 0.866779
4 0.156249 0.625272 0.360799
5 -1.000000 -1.000000 -1.000000 # new row, which is NOT in the HDF file
select 索引 重复 行:
In [40]: idx = store.select('test', where="index in df.index", columns=['index']).index
检查:
In [41]: df.query("index not in @idx")
Out[41]:
a b c
5 -1.0 -1.0 -1.0
仅将那些尚未保存的行附加到 HDFStore:
In [42]: store.append('test', df.query("index not in @idx"), format='t')
检查:
In [43]: store.select('test')
Out[43]:
a b c
0 0.407144 0.972121 0.462502
1 0.044768 0.165924 0.852705
2 0.703686 0.156382 0.066925
3 0.912794 0.362916 0.866779
4 0.156249 0.625272 0.360799
5 -1.000000 -1.000000 -1.000000 # new row has been added
我有一个 HDFStore,我每天晚上都在其中输入数据。我想知道如果系统崩溃等,我可能会重新 运行 进程,所以我想确保如果一行已经存在,那么 pandas 不会在下次进程 运行 时包含它。有没有办法查找重复项而不包含它们?
如果您的代码中有数据框,您仍然可以添加数据并应用到它:
.drop_duplicates()
这将从数据框中删除所有重复数据。
希望对您有所帮助
如果您的 HDFStore 中有唯一索引,您可以使用以下方法:
创建示例 DF:
In [34]: df = pd.DataFrame(np.random.rand(5,3), columns=list('abc'))
In [35]: df
Out[35]:
a b c
0 0.407144 0.972121 0.462502
1 0.044768 0.165924 0.852705
2 0.703686 0.156382 0.066925
3 0.912794 0.362916 0.866779
4 0.156249 0.625272 0.360799
将其保存到 HDFStore:
In [36]: store = pd.HDFStore(r'd:/temp/t.h5')
In [37]: store.append('test', df, format='t')
向我们的 DF 添加新行:
In [38]: df.loc[len(df)] = [-1, -1, -1]
In [39]: df
Out[39]:
a b c
0 0.407144 0.972121 0.462502
1 0.044768 0.165924 0.852705
2 0.703686 0.156382 0.066925
3 0.912794 0.362916 0.866779
4 0.156249 0.625272 0.360799
5 -1.000000 -1.000000 -1.000000 # new row, which is NOT in the HDF file
select 索引 重复 行:
In [40]: idx = store.select('test', where="index in df.index", columns=['index']).index
检查:
In [41]: df.query("index not in @idx")
Out[41]:
a b c
5 -1.0 -1.0 -1.0
仅将那些尚未保存的行附加到 HDFStore:
In [42]: store.append('test', df.query("index not in @idx"), format='t')
检查:
In [43]: store.select('test')
Out[43]:
a b c
0 0.407144 0.972121 0.462502
1 0.044768 0.165924 0.852705
2 0.703686 0.156382 0.066925
3 0.912794 0.362916 0.866779
4 0.156249 0.625272 0.360799
5 -1.000000 -1.000000 -1.000000 # new row has been added