我必须处理相当大的熊猫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所做的更改)。