def dropNodesByCount(grph, minCount = -float('inf'), maxCount = float('inf'), parameterName = 'count', ignoreMissing = False):
    """Modifies _grph_ by dropping nodes that do not have a count that is within inclusive bounds of _minCount_ and _maxCount_, i.e after running _grph_ will only have nodes whose degrees meet the following inequality: _minCount_ <= node's degree <= _maxCount_.

    Count is determined by the count attribute, _parameterName_, and if missing will result in a `KeyError` being raised. _ignoreMissing_ can be set to `True` to suppress the error.

    minCount and maxCount default to negative and positive infinity respectively so without specifying either the output should be the input

    # Parameters

    _grph_ : `networkx Graph`

    > The graph to be modified.

    _minCount_ : `optional [int or double]`

    > default `-inf`, the minimum Count for an node to be kept in the graph.

    _maxCount_ : `optional [int or double]`

    > default `inf`, the maximum Count for an node to be kept in the graph.

    _parameterName_ : `optional [str]`

    > default `'count'`, key to count field in the nodes's attribute dictionary, the default is the same thoughout metaknowledge so is likely to be correct.

    _ignoreMissing_ : `optional [bool]`

    > default `False`, if `True` nodes missing a count will be kept in the graph instead of raising an exception
    """
    count = 0
    total = len(grph.nodes())
    if metaknowledge.VERBOSE_MODE:
        progArgs = (0, "Dropping nodes by count")
        progKwargs = {}
    else:
        progArgs = (0, "Dropping nodes by count")
        progKwargs = {'dummy' : True}
    with _ProgressBar(*progArgs, **progKwargs) as PBar:
        badNodes = []
        for n in grph.nodes(data = True):
            if PBar:
                count += 1
                if count % 10000 == 0:
                    PBar.updateVal(count/ total, str(count) + "nodes analysed and {} nodes dropped".format(len(badNodes)))
            try:
                val = n[1][parameterName]
            except KeyError:
                if not ignoreMissing:
                    raise KeyError("One or more nodes do not have counts or " + str(parameterName), " is not the name of the count parameter")
                else:
                    pass
            else:
                if val < minCount or val > maxCount:
                    badNodes.append(n[0])
        if PBar:
            PBar.updateVal(1, "Cleaning up graph")
        grph.remove_nodes_from(badNodes)
        if PBar:
            PBar.finish("{} nodes out of {} dropped, {} returned".format(len(badNodes), total, total - len(badNodes)))