初始化pandas SparseArray

时间:2017-01-30 23:41:04

标签: pandas

是否可以通过仅提供密集条目来初始化pandas SparseArray?我无法从文档中看出这一点:http://pandas.pydata.org/pandas-docs/stable/sparse.html

例如,假设我想要一个长度为1000的SparseArray,其中一个索引为9,其他地方为零,我将如何创建它?这是一种方式:

HOUR()

但是,在上面,我们必须在稀疏数组之前创建密集数组。有没有办法只指定索引和密集条目来直接创建SparseArray?

1 个答案:

答案 0 :(得分:1)

长度为10 SparseArray,其中一个索引为9,其他地方为零:

pd.SparseArray(1, index= range(1), kind='block', 
               sparse_index= BlockIndex(10, [8], [1]), 
               fill_value=0)

注意:

  1. index可以是任何列表,只要其长度等于数组的所有非稀疏部分(数据的较小部分),在本例中为1的数量。稀疏数组
  2. BlockIndex(10, [8], [1])是指向数据的非解析部分的位置的对象,其中第一个参数是数组的TOTAL长度(稀疏+非稀疏),第二个参数是列表非稀疏数据的起始位置和第三个参数是每个非稀疏块持续多长时间的列表。 注意:第1点中提到的数组的长度是此BlockIndex
  3. 的第三个参数中列表的所有元素的总和

    所以更一般的例子是:使长度为20 SparseArray,其中第2,第3,第6,第7,第8个元素为1,其余为0:

    pd.SparseArray(1, index= range(5), kind='block', 
                   sparse_index= BlockIndex(20, [1,5], [2,3]), 
                   fill_value=0)
    

    pd.SparseArray(1, index= [None, 3, 2, 7, np.inf], kind='block',
                   sparse_index= BlockIndex(20, [1,5], [2,3]),
                   fill_value=0)
    

    可悲的是,我不知道如何指定一组非稀疏数据作为SparseArray的第一个参数 - 这并不意味着它无法完成,这只是一个免责声明。我想只要你指定index=... pandas就需要第一个参数(数据)的标量。

    在Windows 7上测试,由Aconda安装的pandas版本0.20.2