2015-01-09 17 views
6

Mam następujący ramkę danych:Jak zastąpić wszystkie wartości we wszystkich kolumnach w dataframe pandy ze stanu

In [11]: import pandas as pd 

In [12]: mydict = {'foo':[0, 0.3], 'bar':[1,0.55], 'qux': [0.3,4.1]} 

In [13]: df = pd.DataFrame.from_dict(mydict, orient='index') 

In [14]: df 
Out[14]: 
     0  1 
qux 0.3 4.10 
foo 0.0 0.30 
bar 1.0 0.55 

Co chcę zrobić, to wymienić wszystkie wartości, która jest mniejsza niż 1 0. Plonowanie:

 0  1 
qux 0  4.10 
foo 0  0 
bar 1.0 0 

Jak mogę to osiągnąć?

Odpowiedz

6

użyć operacji indeksowania i przekazać warunek:

In [155]: 
df[df<1] = 0 
df 
Out[155]: 
    0 1 
bar 1 0.0 
foo 0 0.0 
qux 0 4.1 

Wystarczy, aby pokazać, co dzieje się tutaj, wykonując df < 1 zwróci logiczną index:

In [156]: 
df < 1 
Out[156]: 
     0  1 
bar False True 
foo True True 
qux True False 

To my następnie przejść do df jako maska a następnie można przypisać nowe wartości jako df[df<1], zobacz docs, aby uzyskać dalsze przykłady.

+0

Jak to zrobić, ale nie t inplace? –

+0

@ O.rka Nie rozumiem twojego pytania, jeśli nie przypiszesz wyniku, to nie zmodyfikujesz df – EdChum

+0

Wiele funkcji ma inplace = False, która nie zmienia oryginalnego obiektu. Czy jest podobny sposób z tym? –

Powiązane problemy