Jak mogę zrobić wartość Dataframe pandas? Nie mogłem znaleźć tej odpowiedzi na liście i pomyślałem, że może to zapewnić dobrą odniesienie dla każdego, kto uczą się, jak pracować z danymi w Dataframe pandas.

In [1]: frame
Out[1]:
       position
index
0          6
1          7
2          7
3          7
4          8
5          9
6          1
7          1
3
clintval 14 sierpień 2014, 22:52

4 odpowiedzi

Najlepsza odpowiedź

Po prostu zrób - frame (lub {x1}}):

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

Jak wspomniano przez innych, nie będzie to działać, jeśli masz również kolumny bez numeryczne. Sposób wybrania wszystkich kolumn numerycznych:

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

A jeśli już negatywne wartości powinny pozostać ujemne, rzeczywiście użyj abs(), jak zauważono @yyPeasy. Wtedy staje się:

- frame.select_dtypes(include=[np.number]).abs()
10
joris 14 sierpień 2014, 19:06

Użyj pandas.dataframe.apply () jak więc:

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
0
clintval 14 sierpień 2014, 18:52

Możesz zastosować dowolny operator lub w kolumnie. Aby go zamuścić na miejscu, po prostu pomnóż kolumnę przez -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

Ale w tym przypadku nie musisz nawet określić kolumny, ponieważ jest to jedyny, który masz, więc tylko:

>>> frame *= -1

Jeśli chcesz utworzyć kopię, zamiastmuić w miejscu, to nawet proste:

>>> frame * -1

... lub, równoważnie, a jeszcze bardziej proste:

>>> -frame
0
abarnert 14 sierpień 2014, 19:00

Inne odpowiedzi zrobią to, co chcesz. Jeśli jednak masz już kilka negatywnych numerów w dataframe, ale chcesz być, to zrobi to:

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

0
Easypeasy 14 sierpień 2014, 19:04