Pandas递归计算绝对值

4

我有一个数据框(在本篇文章中称为data),其中某一列存在正数和负数。我进行如下操作:

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'])

3
data_abs = data.copy() ? - Psidom
1个回答

4

因为你将两个DataFrame设置为相等,所以对一个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()

原始数据框保持不变:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接