Pandas递归计算绝对值

Pandas calculates absolute values recursively

我有一个数据框(在此 post 中称为数据),其中一列包含正值和负值。我执行以下操作:

data.Col.min() --> results in a negative value
data_abs = data
data_abs['Col'] = data_abs['Col'].abs()
data.Col.min() --> results to the lowest absolute value in the dataframe

在我看来,我已经将绝对值存储在自己的变量中,所以我想知道为什么我将值转换为绝对值的代码行会递归地更改我的源变量。

尝试通过以下方式转换值时,我也得到了相同的结果:

data_abs['Col'] = abs(data_abs['Col'])

由于您已将两个 DataFrame 设置为彼此相等,因此对其中一个 DataFrame 的更改将影响另一个。

正如@Psidom 指出的那样,data_abs = data.copy() 不会有这个问题,这就是 .copy 的目的,如 documentation

中所述

例如,如果我们有一个 DataFrame:

data = pd.DataFrame({'Col':[-1,-5,6,8],'Col2':[1,2,2,2]})

然后:

data_abs = data
data_abs['Col'] = data_abs['Col'].abs()

...将更改两个数据帧:

>>> data
   Col  Col2
0    1     1
1    5     2
2    6     2
3    8     2

>>> data_abs
   Col  Col2
0    1     1
1    5     2
2    6     2
3    8     2

但是如果我们改为使用 .copy:

data_abs = data.copy()
data_abs['Col'] = data_abs['Col'].abs()

原始DataFrame保持不变:

>>> data
   Col  Col2
0   -1     1
1   -5     2
2    6     2
3    8     2