Skip to main content
 首页 » 编程设计

python之Pandas:数据框与用于定义它的 numpy.array 之间的关系

2025年05月04日9mfrbuaa

我只是想创建两个最初为空的相同维度的数据框。我是这样做的:

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)