我只是想创建两个最初为空的相同维度的数据框。我是这样做的:
import numpy as np
import pandas as pd
m = np.empty((2, 3))*np.nan
df1 = pd.DataFrame(m)
df2 = pd.DataFrame(m)
但是当我更改一个数据框中的特定值时,所有三个对象都会受到影响:
df2.iloc[1, 2] = 1
print(df2)
0 1 2
0 NaN NaN NaN
1 NaN NaN 1.0
print(df1)
0 1 2
0 NaN NaN NaN
1 NaN NaN 1.0
print(m)
array([[nan, nan, nan],
[nan, nan, 1.]])
所以看起来数据框只是一个 numpy 数组的包装器:没有复制。我没有在任何地方看到这种行为的记录,我只是想指出来。有什么意见吗?
请您参考如下方法:
DataFrame 有一个 init 参数,让您指定将数据从 ndarray 复制到 DataFrame。
查看 pandas 源代码 frame.py , 行 405然后... 默认情况下,copy 为 False。
因此,您可以使用以下内容强制复制:
import numpy as np
import pandas as pd
m = np.empty((2, 3))*np.nan
df1 = pd.DataFrame(m,copy=True)
df2 = pd.DataFrame(m)
df2.iloc[1, 2] = 1
print(df1)
print(df2)
