问题
编辑日期: 2024-11-28 文章阅读: 次
问题
在做输入数据预处理时遇到一个乍看起来比较奇怪的问题。先说一下问题。我想根据条件提取部分数据,修改这部分数据某一列的值,原本以为这样做可以修改数据源。 结果发现,并没有! 修改数据切片,会修改原数据啊! 难道根据掩码提取的数据不是对原数据的引用吗?
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({"a":[3,2,1],"b":['s','w','e']})
In [3]: df
Out[3]:
a b
0 3 s
1 2 w
2 1 e
### 修改数据切片
In [7]: df[:2] = pd.DataFrame({'a':[30,20],'b':['s','w']})
In [8]: df
Out[8]:
a b
0 30.0 s
1 20.0 w
2 1.0 e
掩码提取数据再修改
### 掩码提取数据
In [9]: df2 = df[df.a > 2]
In [10]: df2
Out[10]:
a b
0 30.0 s
1 20.0 w
In [18]: df2 = pd.DataFrame({'a':[300,200],'b':['s','w']})
In [19]: df
Out[19]:
a b
0 30.0 s
1 20.0 w
2 1.0 e
修改数据切片,原数据对应修改,因为切片是对原数据的引用;修改掩码提取的数据,原数据不改变,因为掩码返回的数据指向一块新的内存,不是原来的块引用!
总结
修改数据切片,原数据对应修改;修改掩码提取的数据,原数据不改变