如何优化熊猫DataFrames切片副本?

时间:2020-05-20 15:27:30

标签: python pandas numpy

我必须处理相当大的熊猫DataFrames,我正在寻找有关如何优化工作流程的建议。我基本上有两个名为“ data”和“ constants”的主要数据帧,这是一个虚拟示例:

constants = pd.DataFrame({'ID':np.arange(1,3), 'Callsign':['AAA', 'BBB'],
                          'to':[1, 0], 'ADEP':['LSGG', None]})
constants
    ID  Callsign    to  ADEP
0   1   AAA     1   LSGG
1   2   BBB     0   None

data = pd.DataFrame({'ID':[1, 1, 1, 2, 2],
                     'time':pd.date_range(start='1/1/2018', end='1/05/2018'),
                     'Lon':[8.1, 8.15, 8.2, 8.6, 8.55],
                     'Lat':[45.1, 45.15, 45.2, 45.6, 45.55]})
data
    ID  time    Lon     Lat
0   1   2018-01-01  8.10    45.10
1   1   2018-01-02  8.15    45.15
2   1   2018-01-03  8.20    45.20
3   2   2018-01-04  8.60    45.60
4   2   2018-01-05  8.55    45.55

那些数据段属于轨迹,我想为每个轨迹创建一个Trajectory对象的实例,该实例包含共享相同“ ID”的每个原始DataFrame的切片。到目前为止,我是这样做的:

class Trajectory():
  def __init__(self, constants, data):
    self.constants = constants,
    self.data = data

trajs_dict = {ids: Trajectory(constants.loc[constants.ID == ids],
                              data.loc[data.ID == ids])
              for ids in constants.ID.unique()}

现在的问题是,它没有创建我的原始DataFrames的视图,而是创建了一个副本:(比照我以前的so question

trajs_dict[1].data._is_view
False

因此,它不会优化我的记忆。您是否知道如何优化工作流程以节省一些内存?

加分点:原始DataFrame(“数据”和“常量”)是否可能反映我可以在切片上(即在对象级别)进行的更改,例如:trajs_dict[1].constants.to = 0,并且反过来(切片反映了我对原始“常量”和“数据” DataFrame所做的更改)。

0 个答案:

没有答案