在csv文件中存储和读取多个直方图

2024-10-06 15:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用以pandas系列表示的直方图,并表示从观察集实现的随机变量。我正在寻找一种有效的方法来存储和读取它们

柱状图的箱子是系列的索引。例如:

histogram1 :
(-1.3747106810983318, 3.529160051186781]    0.012520
(3.529160051186781, 8.433030783471894]      0.013830
(8.433030783471894, 13.336901515757006]     0.016495
(13.336901515757006, 18.24077224804212]     0.007194
(18.24077224804212, 23.144642980327234]     0.041667
(23.144642980327234, 28.048513712612344]    0.000000

我想将这些直方图中的几个存储在一个csv文件中(每一组随机变量一个文件,一个文件将存储约100个直方图),并在以后完全按照存储之前的方式读取它们(文件中的每个直方图作为一个序列,所有值作为浮点数)

我该怎么做?既然速度很重要,有没有比csv文件更有效的方法

因此,当一个变量的新实现出现时,我将从相应的文件中检索它的直方图,并评估它“落入”的bin。大概是这样的:

# Not very elegant
for bin in histogram1.index:
    if 1.0232545 in bin:
        print("It's in!")
        print(histogram1.loc[bin])

谢谢


Tags: 文件csv方法inpandasbin方式序列
1条回答
网友
1楼 · 发布于 2024-10-06 15:26:09

您在这里讨论的是两个不同的主题:

  1. 存储多个系列的有效方法是什么
  2. 如何从已形成的IntervalIndex确定float的bin

第一部分很简单。在保存到csv(或者更确切地说)之前,我会使用pandas.concat()创建一个大框架

pd.concat(histograms, keys=hist_names, names=['hist_name','bin']).rename('random_variable').to_frame().to_parquet()

有关更多信息,请参见.to_parquet()this answerthis benchmark

然后,在回读时,选择一个带有

hist1 = df.loc[('hist1', :), 'random_variable']

grouped = df.reset_index('hist_name').groupby('hist_name')
hist1 = grouped.get_group('hist1')

第二部分已经得到答复。 简而言之,您需要通过以下方式展平IntervalIndex:

bins = hist1.index.right

然后,您可以使用numpy.digitize找到您的值(或值列表)的bin:

i = np.digitize(my_value, bins)
return_value = hist1.iloc[i]

编辑

刚刚发现this answer关于Indexing with an IntervalIndex,这也适用于:

return_value = hist1.loc[my_value]

相关问题 更多 >