<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def storages(self):
 """ Gathers relevant storage results. Returns ------- :pandas:`pandas.DataFrame<dataframe>` Dataframe containing all storages installed in the MV grid and LV grids. Index of the dataframe are the storage representatives, columns are the following: nominal_power : :obj:`float` Nominal power of the storage in kW. voltage_level : :obj:`str` Voltage level the storage is connected to. Can either be 'mv' or 'lv'. """

        grids = [self.network.mv_grid] + list(self.network.mv_grid.lv_grids)
        storage_results = {}
        storage_results['storage_id'] = []
        storage_results['nominal_power'] = []
        storage_results['voltage_level'] = []
        storage_results['grid_connection_point'] = []
        for grid in grids:
            for storage in grid.graph.nodes_by_attribute('storage'):
                storage_results['storage_id'].append(repr(storage))
                storage_results['nominal_power'].append(storage.nominal_power)
                storage_results['voltage_level'].append(
                    'mv' if isinstance(grid, MVGrid) else 'lv')
                storage_results['grid_connection_point'].append(
                     grid.graph.neighbors(storage)[0])

        return pd.DataFrame(storage_results).set_index('storage_id')