为什么我应该制作数据框的*浅*副本?
why should I make a *shallow* copy of a dataframe?
与why should I make a copy of a data frame in pandas相关
我注意到在流行的 backtesting 库中,
def __init__(self, data: pd.DataFrame)
data = data.copy(False)
第 631 行。这样一个副本的目的是什么?
浅拷贝允许你
- 无需复制即可访问帧数据(内存优化等)
- 修改帧结构而不将其反映到原始数据帧
在回溯测试中,开发人员尝试将索引更改为 datetime
格式(第 640 行)并添加一个新列 'Volume'
和 np.nan
值(如果它不在数据框中)。这些更改不会反映在原始数据框中。
例子
>>> a = pd.DataFrame([[1, 'a'], [2, 'b']], columns=['i', 's'])
>>> b = a.copy(False)
>>> a
i s
0 1 a
1 2 b
>>> b
i s
0 1 a
1 2 b
>>> b.index = pd.to_datetime(b.index)
>>> b['volume'] = 0
>>> b
i s volume
1970-01-01 00:00:00.000000000 1 a 0
1970-01-01 00:00:00.000000001 2 b 0
>>> a
i s
0 1 a
1 2 b
当然,如果您不创建浅拷贝,对数据帧结构的那些更改将反映在原始数据帧结构中。
与why should I make a copy of a data frame in pandas相关
我注意到在流行的 backtesting 库中,
def __init__(self, data: pd.DataFrame)
data = data.copy(False)
第 631 行。这样一个副本的目的是什么?
浅拷贝允许你
- 无需复制即可访问帧数据(内存优化等)
- 修改帧结构而不将其反映到原始数据帧
在回溯测试中,开发人员尝试将索引更改为 datetime
格式(第 640 行)并添加一个新列 'Volume'
和 np.nan
值(如果它不在数据框中)。这些更改不会反映在原始数据框中。
例子
>>> a = pd.DataFrame([[1, 'a'], [2, 'b']], columns=['i', 's'])
>>> b = a.copy(False)
>>> a
i s
0 1 a
1 2 b
>>> b
i s
0 1 a
1 2 b
>>> b.index = pd.to_datetime(b.index)
>>> b['volume'] = 0
>>> b
i s volume
1970-01-01 00:00:00.000000000 1 a 0
1970-01-01 00:00:00.000000001 2 b 0
>>> a
i s
0 1 a
1 2 b
当然,如果您不创建浅拷贝,对数据帧结构的那些更改将反映在原始数据帧结构中。