from petl import skipcomments, look look(table1) table2 = skipcomments(table1, '##') look(table2) # unpack table1 = [['foo', 'bar'], [1, ['a', 'b']], [2, ['c', 'd']], [3, ['e', 'f']]] from petl import unpack, look look(table1) table2 = unpack(table1, 'bar', ['baz', 'quux']) look(table2) # join table1 = [['id', 'colour'], [1, 'blue'], [2, 'red'], [3, 'purple']] table2 = [['id', 'shape'], [1, 'circle'], [3, 'square'], [4, 'ellipse']] table5 = [['id', 'colour'], [1, 'blue'],
def unpack_list(self, column, include_original=False, missing=None, replace=False, max_columns=None): """ Unpack list values from one column into separate columns. Numbers the columns. .. code-block:: python # Begin with a list in column json = [{'id': '5421', 'name': 'Jane Green', 'phones': ['512-699-3334', '512-222-5478'] } ] tbl = Table(json) print (tbl) >>> {'id': '5421', 'name': 'Jane Green', 'phones': ['512-699-3334', '512-222-5478']} tbl.unpack_list('phones', replace=True) print (tbl) >>> {'id': '5421', 'name': 'Jane Green', 'phones_0': '512-699-3334', 'phones_1': '512-222-5478'} # noqa: E501 `Args:` column: str The column name to unpack include_original: boolean Retain original column after unpacking sample_size: int Number of rows to sample before determining columns missing: str If a value is missing, the value to fill it with replace: boolean Return new table or replace existing max_columns: int The maximum number of columns to unpack `Returns:` None """ # Convert all column values to list to avoid unpack errors self.table = petl.convert( self.table, column, lambda v: [v] if not isinstance(v, list) else v) # Find the max number of values in list for all rows col_count = 0 for row in self.cut(column): if len(row[column]) > col_count: col_count = len(row[column]) # If max columns provided, set max columns if col_count > 0 and max_columns: col_count = max_columns # Create new column names "COL_01, COL_02" new_cols = [] for i in range(col_count): new_cols.append(column + '_' + str(i)) tbl = petl.unpack(self.table, column, new_cols, include_original=include_original, missing=missing) if replace: self.table = tbl else: return tbl