Пример #1
0
def test_values():
    """Test the values function."""
    
    table = (('foo', 'bar', 'baz'), 
             ('a', 1, True), 
             ('b', 2), 
             ('b', 7, False))

    actual = values(table, 'foo')
    expect = ('a', 'b', 'b')
    ieq(expect, actual) 
    ieq(expect, actual) 

    actual = values(table, 'bar')
    expect = (1, 2, 7)
    ieq(expect, actual) 
    ieq(expect, actual) 

    # old style signature for multiple fields, still supported
    actual = values(table, ('foo', 'bar'))
    expect = (('a', 1), ('b', 2), ('b', 7))
    ieq(expect, actual) 
    ieq(expect, actual) 

    # as of 0.24 new style signature for multiple fields
    actual = values(table, 'foo', 'bar')
    expect = (('a', 1), ('b', 2), ('b', 7))
    ieq(expect, actual)
    ieq(expect, actual)

    actual = values(table, 'baz')
    expect = (True, None, False)
    ieq(expect, actual)
    ieq(expect, actual) 
Пример #2
0
 def __init__(self, *args, **kwargs):
     if len(args) == 2:
         self.input = args[0]
         self.period = args[1]
     elif len(args) == 3:
         self.input = values(args[0], args[1])
         self.period = args[2]
     else:
         assert False, 'invalid arguments'
     self.missing = kwargs.get('missing', None)
Пример #3
0
 def __init__(self, *args, **kwargs):
     if len(args) == 2:
         self.input = args[0]
         self.period = args[1]
     elif len(args) == 3:
         self.input = values(args[0], args[1])
         self.period = args[2]
     else:
         assert False, 'invalid arguments'
     self.missing = kwargs.get('missing', None)
Пример #4
0
def facet(table, field):
    """
    Return a dictionary mapping field values to tables.

    E.g.::

        >>> from petl import facet, look
        >>> look(table1)
        +-------+-------+-------+
        | 'foo' | 'bar' | 'baz' |
        +=======+=======+=======+
        | 'a'   | 4     | 9.3   |
        +-------+-------+-------+
        | 'a'   | 2     | 88.2  |
        +-------+-------+-------+
        | 'b'   | 1     | 23.3  |
        +-------+-------+-------+
        | 'c'   | 8     | 42.0  |
        +-------+-------+-------+
        | 'd'   | 7     | 100.9 |
        +-------+-------+-------+
        | 'c'   | 2     |       |
        +-------+-------+-------+

        >>> foo = facet(table1, 'foo')
        >>> foo.keys()
        ['a', 'c', 'b', 'd']
        >>> look(foo['a'])
        +-------+-------+-------+
        | 'foo' | 'bar' | 'baz' |
        +=======+=======+=======+
        | 'a'   | 4     | 9.3   |
        +-------+-------+-------+
        | 'a'   | 2     | 88.2  |
        +-------+-------+-------+

        >>> look(foo['c'])
        +-------+-------+-------+
        | 'foo' | 'bar' | 'baz' |
        +=======+=======+=======+
        | 'c'   | 8     | 42.0  |
        +-------+-------+-------+
        | 'c'   | 2     |       |
        +-------+-------+-------+

    See also :func:`facetcolumns`.

    """

    fct = dict()
    for v in set(values(table, field)):
        fct[v] = selecteq(table, field, v)
    return fct
Пример #5
0
def facet(table, field):
    """
    Return a dictionary mapping field values to tables.

    E.g.::

        >>> from petl import facet, look
        >>> look(table1)
        +-------+-------+-------+
        | 'foo' | 'bar' | 'baz' |
        +=======+=======+=======+
        | 'a'   | 4     | 9.3   |
        +-------+-------+-------+
        | 'a'   | 2     | 88.2  |
        +-------+-------+-------+
        | 'b'   | 1     | 23.3  |
        +-------+-------+-------+
        | 'c'   | 8     | 42.0  |
        +-------+-------+-------+
        | 'd'   | 7     | 100.9 |
        +-------+-------+-------+
        | 'c'   | 2     |       |
        +-------+-------+-------+

        >>> foo = facet(table1, 'foo')
        >>> foo.keys()
        ['a', 'c', 'b', 'd']
        >>> look(foo['a'])
        +-------+-------+-------+
        | 'foo' | 'bar' | 'baz' |
        +=======+=======+=======+
        | 'a'   | 4     | 9.3   |
        +-------+-------+-------+
        | 'a'   | 2     | 88.2  |
        +-------+-------+-------+

        >>> look(foo['c'])
        +-------+-------+-------+
        | 'foo' | 'bar' | 'baz' |
        +=======+=======+=======+
        | 'c'   | 8     | 42.0  |
        +-------+-------+-------+
        | 'c'   | 2     |       |
        +-------+-------+-------+

    See also :func:`facetcolumns`.

    """

    fct = dict()
    for v in set(values(table, field)):
        fct[v] = selecteq(table, field, v)
    return fct
Пример #6
0
def collapsedintervals(tbl, start='start', stop='stop', facet=None):
    """
    Utility function to collapse intervals in a table. 
    
    If no facet key is given, returns an iterator over `(start, stop)` tuples.
    
    If facet key is given, returns an iterator over `(key, start, stop)` tuples.  
    
    .. versionadded:: 0.5.5
    
    """
    
    if facet is None:
        tbl = sort(tbl, key=start)
        for iv in _collapse(values(tbl, (start, stop))):
            yield iv
    else:
        tbl = sort(tbl, key=(facet, start))
        for k, g in rowgroupby(tbl, key=facet, value=(start, stop)):
            for iv in _collapse(g):
                yield (k,) + iv
Пример #7
0
def collapsedintervals(tbl, start='start', stop='stop', facet=None):
    """
    Utility function to collapse intervals in a table. 
    
    If no facet key is given, returns an iterator over `(start, stop)` tuples.
    
    If facet key is given, returns an iterator over `(key, start, stop)` tuples.  
    
    .. versionadded:: 0.5.5
    
    """

    if facet is None:
        tbl = sort(tbl, key=start)
        for iv in _collapse(values(tbl, (start, stop))):
            yield iv
    else:
        tbl = sort(tbl, key=(facet, start))
        for k, g in rowgroupby(tbl, key=facet, value=(start, stop)):
            for iv in _collapse(g):
                yield (k, ) + iv