熊猫DF.AT的价格有误

若昂

我正在使用Colab运行以下代码:

import numpy as np
import pandas as pd


MAP_locs = ["LOAD POINT 1","LOAD POINT 2","DELIVERY POINT"] 

MAP_SIZE = len(MAP_locs)

LOAD_POINT_1 = []
LOAD_POINT_2 = []
DELIVERY_POINT = []

for i in range(10):
    LOAD_POINT_1.append(0.5)
    LOAD_POINT_2.append(0.5)
    DELIVERY_POINT.append(-1)

d = {'LOAD POINT 1': LOAD_POINT_1,
     'LOAD POINT 2': LOAD_POINT_2,
     'DELIVERY POINT': DELIVERY_POINT}

df = pd.DataFrame(data=d)


VESSEL_Y = 6 
VESSEL_X = [1,0,0] 
VESSEL_X_to_df = MAP_locs[VESSEL_X.index(1)] 


class VESSEL():
    def __init__(self, x , y, cargo_capacity, cargo_on_board):
        self.y = VESSEL_Y
        self.x = VESSEL_X.index(1)
        self.cargo_capacity = 1
        self.cargo_on_board = 0

    def load(self):

        print("Loading")

        cargo_to_load = 0
        max_quantity_2load =  self.cargo_capacity - self.cargo_on_board
        cargo_on_location = df.at[VESSEL_Y,VESSEL_X_to_df]
        if cargo_on_location <= 0 or max_quantity_2load == 0:
            False
            print("Load = False")
        else:
            True
            print("Load = TRUE")
            if cargo_on_location > max_quantity_2load:
                cargo_to_load = max_quantity_2load
            if cargo_on_location <= max_quantity_2load:
                cargo_to_load = cargo_on_location
            print("Max quantity 2 load: ",max_quantity_2load,'\n', "Cargo on loc: ",cargo_on_location,'\n', "Cargo on board: ",self.cargo_on_board,'\n', "Cargo to load: ",cargo_to_load)
            df.at[VESSEL_Y,VESSEL_X_to_df] = df.at[VESSEL_Y,VESSEL_X_to_df] - cargo_to_load 
            self.cargo_on_board = self.cargo_on_board + cargo_to_load 
            cargo_on_location = df.at[VESSEL_Y,VESSEL_X_to_df] 
            cargo_to_load = 0 
            max_quantity_2load =  self.cargo_capacity - self.cargo_on_board 
            print("Loaded")
            print("Max quantity 2 load: ",max_quantity_2load,'\n', "Cargo on loc: ",cargo_on_location,'\n', "Cargo on board: ",self.cargo_on_board,'\n', "Cargo to load: ",cargo_to_load)
            print('\n','\n')

    def discharge(self):
        print("cargo on board: ",self.cargo_on_board)
        CT_capacity = df.at[VESSEL_Y,VESSEL_X_to_df] 
        if CT_capacity >= 0 or self.cargo_on_board == 0: 
            False
            print("Discharge = False")
        else:
            True
            print("Discharge = TRUE")
            if -CT_capacity > self.cargo_on_board:
                cargo_to_discharge = self.cargo_on_board
            if -CT_capacity <= self.cargo_on_board:
                cargo_to_discharge = -CT_capacity
            print("cargo_to_discharge 2: ",cargo_to_discharge)
            print("PD value1:",df.at[VESSEL_Y,VESSEL_X_to_df])
            CT_remaining_capacity = df.at[VESSEL_Y,VESSEL_X_to_df]+cargo_to_discharge
            print("CT remaining capacity",CT_remaining_capacity)
            df.at[VESSEL_Y,VESSEL_X_to_df] = CT_remaining_capacity 
            print("here is a problem. it should be -0.5 dunno why is zero:",df.at[VESSEL_Y,VESSEL_X_to_df])
            self.cargo_on_board = self.cargo_on_board - cargo_to_discharge 
            CT_capacity = df.at[VESSEL_Y,VESSEL_X_to_df] 
            if -CT_capacity > self.cargo_on_board:
                cargo_to_discharge = self.cargo_on_board
            if -CT_capacity <= self.cargo_on_board:
                cargo_to_discharge = -CT_capacity
            print("Discharged")
            print("CT_capacity: ",CT_capacity,'\n', "cargo_to_discharge: ",cargo_to_discharge,'\n', "Cargo on board: ",self.cargo_on_board, '\n', "PD value:",df.at[VESSEL_Y,VESSEL_X_to_df])
            print('\n','\n')


print("Vessel gonna act")
print("Vessel loc: ", VESSEL_X_to_df)
VESSEL_1 = VESSEL(x=VESSEL_X,y=VESSEL_Y,cargo_capacity=1, cargo_on_board=0)
VESSEL_1.load()

VESSEL_X = [0,0,1] 
VESSEL_X_to_df = MAP_locs[VESSEL_X.index(1)] 
print("Vessel loc: ", VESSEL_X_to_df)
VESSEL_1.discharge()

想法是在某些位置进行船只装卸。装载和卸载的数量受容器容量和存储量的限制(装载范围从0到1,排出范围从0到2)。

我认为加载工作正常,但是当使用放电并且尝试更新DF信息(df.at [VESSEL_Y,VESSEL_X_to_df])时,该值变为零,并且我期望-0.5,即我期望获得PD值2为-0.5,而不是0.00。

出于某些原因,df.at在这里不起作用,我无法找到原因。我考虑过将其更改为loc或类似名称,但想了解为什么这不起作用。

感谢您的帮助。

qua

问题是.at试图保留数据类型,在这种情况下为整数。看到这个答案。当您更改数据类型时,它会按预期工作。我在行中添加了句点:

DELIVERY_POINT.append(-1.)

这使其成为浮点数。现在,您的代码将按预期运行。从链接的讨论中我的理解是.loc不会出现此问题。也有可能使.loc头发变慢,但是这种差异可以忽略不计。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章