作者:mobiledu2502897817 | 来源:互联网 | 2022-12-01 17:34
我只是想创建两个相同尺寸的数据框,最初为空.我是这样做的:
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数组的包装:没有复制.我没有在任何地方看到这种行为,我只想指出它.任何意见?
1> emirc..:
DataFrame 有一个init arg,你可以指定将数据从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)