Vorrei sapere se c'è qualche modo per sostituire tutti i numeri negativi di DataFrame con zero?Come sostituire i numeri negativi in Pandas Data Frame di zero
20
A
risposta
30
Se tutte le colonne sono numerici, è possibile utilizzare l'indicizzazione booleano:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'a': [0, -1, 2], 'b': [-3, 2, 1]})
In [3]: df
Out[3]:
a b
0 0 -3
1 -1 2
2 2 1
In [4]: df[df < 0] = 0
In [5]: df
Out[5]:
a b
0 0 0
1 0 2
2 2 1
Per il caso più generale, this answer illustra il metodo privato _get_numeric_data
:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'a': [0, -1, 2], 'b': [-3, 2, 1],
'c': ['foo', 'goo', 'bar']})
In [3]: df
Out[3]:
a b c
0 0 -3 foo
1 -1 2 goo
2 2 1 bar
In [4]: num = df._get_numeric_data()
In [5]: num[num < 0] = 0
In [6]: df
Out[6]:
a b c
0 0 0 foo
1 0 2 goo
2 2 1 bar
Con il tipo timedelta
, l'indicizzazione booleana sembra funzionare su colonne separate, b non su tutto il dataframe. Così si può fare:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'a': pd.to_timedelta([0, -1, 2], 'd'),
...: 'b': pd.to_timedelta([-3, 2, 1], 'd')})
In [3]: df
Out[3]:
a b
0 0 days -3 days
1 -1 days 2 days
2 2 days 1 days
In [4]: for k, v in df.iteritems():
...: v[v < 0] = 0
...:
In [5]: df
Out[5]:
a b
0 0 days 0 days
1 0 days 2 days
2 2 days 1 days
Aggiornamento: confronto con un pd.Timedelta
opere su tutto il dataframe:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'a': pd.to_timedelta([0, -1, 2], 'd'),
...: 'b': pd.to_timedelta([-3, 2, 1], 'd')})
In [3]: df[df < pd.Timedelta(0)] = 0
In [4]: df
Out[4]:
a b
0 0 days 0 days
1 0 days 2 days
2 2 days 1 days
4
Forse si potrebbe usare pandas.where(args)
in questo modo:
data_frame = data_frame.where(data_frame < 0, 0)
13
Un altro modo succinto per farlo è pandas.DataFrame.clip.
Ad esempio:
import pandas as pd
In [20]: df = pd.DataFrame({'a': [-1, 100, -2]})
In [21]: df
Out[21]:
a
0 -1
1 100
2 -2
In [22]: df.clip(lower=0)
Out[22]:
a
0 0
1 100
2 0
C'è anche df.clip_lower(0)
.
Problemi correlati
- 1. itoa per i numeri negativi?
- 2. disable index pandas data frame
- 3. mysql previene i numeri negativi
- 4. Sostituire valori in Pandas Serie condizione data
- 5. Confrontando i numeri negativi in javascript
- 6. Pandas to_dict che modifica i numeri
- 7. Perché std :: stoul converte i numeri negativi?
- 8. JavaScript Math Object Methods - negativi a zero
- 9. Kadane algoritmo numeri negativi
- 10. Spesso i numeri grandi diventano negativi
- 11. Come includere i numeri decimali negativi in questa espressione regolare?
- 12. Numeri casuali e negativi
- 13. Sostituire i valori NaN in un elenco con zero (0)
- 14. Rappresentazione di numeri negativi in C?
- 15. Come sostituire il valore NaN con zero in un enorme frame di dati?
- 16. Pandas: convertire categorie per i numeri
- 17. Pandas: Unire frame di dati sull'indice datetime
- 18. Come bloccare i numeri negativi su h: inputText con JSF
- 19. In che modo Java calcola i numeri negativi?
- 20. funziona con numeri negativi in python
- 21. Sostituire i valori nel frame di dati in base ad altro frame di dati in R
- 22. Come si comporta Verilog con numeri negativi?
- 23. TryParse fallito con numeri negativi
- 24. Perché Gnu Octave ha zero negativi?
- 25. Rappresentazioni di compilatori e numeri negativi
- 26. Come assegnare un elenco alla colonna esistente di Data Frame di Pandas?
- 27. Come per riordinare le righe indicizzati sulla base di un elenco di Pandas data frame
- 28. Come convertire numeri interi negativi in binario in Ruby
- 29. come generare numeri positivi e negativi in Java
- 30. Come utilizzare numeri negativi in un intervallo in Swift?
Inoltre, credo che la seconda riga dovrebbe leggere 'num [num <0] = 0' – hlin117