在 Jupyter Notebook 中丢失变量
Losing variables in Jupyter Notebook
在 jupyter notebook 中,我从文件中声明了一个变量:
with fits.open('mind_dataset/matrix_CEREBELLUM_large.fits') as data:
matrix_cerebellum = pd.DataFrame(data[0].data.byteswap().newbyteorder())
在下面的单元格中,我有两种方法:
neuronal_web_pixel = 0.32 # 1 micron => 10e-6 meters
def pixels_to_scale(df, mind=False, cosmos=False):
one_pixel_equals_micron = neuronal_web_pixel
brain_mask = (df != 0.0)
df[brain_mask] *= one_pixel_equals_micron
return df
和
def binarize_matrix(df, mind=False, cosmos=False):
brain_Llink = 16.0 # microns
zero_mask = (df != 0)
low_mask = (df <= brain_Llink)
df[low_mask & zero_mask] = 1.0
higher_mask = (df >= brain_Llink)
df[higher_mask] = 0.0
return df
然后我将我的变量传递给方法,以获得缩放和二进制数据帧:
matrix_cerebellum_scaled = pixels_to_scale(matrix_cerebellum, mind=True)
并且:
matrix_cerebellum_binary = binarize_matrix(matrix_cerebellum_scaled, mind=True)
但是,如果我调用 'matrix_cerebellum_scaled',现在它指向 'matrix_cerebellum_binary',我会丢失 'matrix_cerebellum_scaled' 数据帧。
为什么?我错过了什么?
命名:这些不是方法,而是函数;现在:如果您在函数中修改 DataFrame,这些更改仍然会发生在 DataFrame 上。如果您想要一个新的 DataFrame,请将其声明为传入的 DataFrame 的副本。
至少在 binarize_matrix()
的顶部执行:new_df = df.copy()
。有关此 SO 答案和评论中为什么有必要的更多详细信息:
在 jupyter notebook 中,我从文件中声明了一个变量:
with fits.open('mind_dataset/matrix_CEREBELLUM_large.fits') as data:
matrix_cerebellum = pd.DataFrame(data[0].data.byteswap().newbyteorder())
在下面的单元格中,我有两种方法:
neuronal_web_pixel = 0.32 # 1 micron => 10e-6 meters
def pixels_to_scale(df, mind=False, cosmos=False):
one_pixel_equals_micron = neuronal_web_pixel
brain_mask = (df != 0.0)
df[brain_mask] *= one_pixel_equals_micron
return df
和
def binarize_matrix(df, mind=False, cosmos=False):
brain_Llink = 16.0 # microns
zero_mask = (df != 0)
low_mask = (df <= brain_Llink)
df[low_mask & zero_mask] = 1.0
higher_mask = (df >= brain_Llink)
df[higher_mask] = 0.0
return df
然后我将我的变量传递给方法,以获得缩放和二进制数据帧:
matrix_cerebellum_scaled = pixels_to_scale(matrix_cerebellum, mind=True)
并且:
matrix_cerebellum_binary = binarize_matrix(matrix_cerebellum_scaled, mind=True)
但是,如果我调用 'matrix_cerebellum_scaled',现在它指向 'matrix_cerebellum_binary',我会丢失 'matrix_cerebellum_scaled' 数据帧。
为什么?我错过了什么?
命名:这些不是方法,而是函数;现在:如果您在函数中修改 DataFrame,这些更改仍然会发生在 DataFrame 上。如果您想要一个新的 DataFrame,请将其声明为传入的 DataFrame 的副本。
至少在 binarize_matrix()
的顶部执行:new_df = df.copy()
。有关此 SO 答案和评论中为什么有必要的更多详细信息: