Raising an error if a variable is not created during class initalization
You got the arrow anti-pattern:

    try:
        with open(self.filepath, 'rU') as c:
            rows = csv.reader(c)
            for row in rows:
                row[:] = [r.lower().strip() for r in row]

                if row[0].startswith('name'):
                    self._header = row     # Create Header Variable

                self._data.append(row)

    except IOError:
        raise IOError(
            '"{}" not found in "{}"'.format(self.filename, self.localdir))


4 levels of nesting..., instead, perform exception handling before:

try:
    with open(self.filepath, 'rU') as c:
        rows = csv.reader(c)
except IOError:
    raise IOError(
       '"{}" not found in "{}"'.format(self.filename, self.localdir))


Data processing comes later, so now you have 2 levels of nesting before and 2 levels of nesting after, that is much better than 4 levels of nesting in one place.