使pandas DataFrame中的每个数值都为负数

时间:2014-08-14 18:52:15

标签: python pandas dataframe

如何将每个pandas DataFrame值设为负数?我找不到这个答案,并认为它可以为学习如何使用pandas DataFrame中的数据的人提供一个很好的参考。

In [1]: frame
Out[1]:
       position
index
0          6
1          7
2          7
3          7
4          8
5          9
6          1
7          1

4 个答案:

答案 0 :(得分:8)

只需- frame(或*-1):

In [122]: -frame
Out[122]:
       position
index
0            -6
1            -7
2            -7
3            -7
4            -8
5            -9
6            -1
7            -1

如其他人所述,如果您还有非数字列,则无法使用此功能。一种选择所有数字列的方法:

frame.select_dtypes(include=[np.number])

如果已经负值应该保持负值,确实使用@Easypeasy所指出的abs()。然后这就变成了:

- frame.select_dtypes(include=[np.number]).abs()

答案 1 :(得分:0)

像这样使用pandas.DataFrame.apply()

In [1]: f = lambda x: -x; frame.apply(f, axis=1)
Out[1]:
       position
index
0         -6
1         -7
2         -7
3         -7
4         -8
5         -9
6         -1
7         -1

答案 2 :(得分:0)

您可以应用任何运算符或列。要在原地改变它,只需将列乘以-1:

>>> frame = pd.DataFrame({'position': [6,7,7,7,8,9,1,1]})
>>> frame['position'] *= -1
>>> frame
   position
0        -6
1        -7
2        -7
3        -7
4        -8
5        -9
6        -1
7        -1

但在这种情况下,你甚至不需要指定一个列,因为它是你唯一的一个,所以只是:

>>> frame *= -1

如果你想创建一个副本而不是就地变异,那就更简单了:

>>> frame * -1

...或者,等同甚至更简单:

>>> -frame

答案 3 :(得分:0)

其他答案会做你想要的。但是,如果您的数据框中已经有一些负数,但希望所有数字都是负数,那么这样做:

frame.apply(lambda x: -x.abs(), axis=1)