Chciałbym wiedzieć, czy istnieje jakakolwiek zamiana wszystkich liczb ujemnych DataFrame na zera?Jak zamienić cyfry ujemne w ramce danych Pandas przez zero
20
A
Odpowiedz
30
Jeśli wszystkie kolumny są numeryczne, można użyć logiczną indeksowania:
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
Dla bardziej ogólnym przypadku, this answer pokazuje prywatną metodę _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
W przypadku typu timedelta
indeksowanie boolowskie wydaje się działać na oddzielnych kolumnach, b ut nie na całej ramce danych. Więc można zrobić:
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
Aktualizacja: porównaniu z pd.Timedelta
prac na całej 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
Może przydałby pandas.where(args)
tak:
data_frame = data_frame.where(data_frame < 0, 0)
13
Innym zwięzłym sposobem na to jest pandas.DataFrame.clip.
Na przykład:
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
Jest też df.clip_lower(0)
.
Powiązane problemy
- 1. Jak zamienić wartość NaN na zero w ogromnej ramce danych?
- 2. Jak drukować ujemne zero w Pythonie
- 3. Jak zamienić wartość w ramce danych w R?
- 4. Jak zamienić wartości na Brak w ramce danych Pand w Pythonie?
- 5. Radzenie wielu list w ramce danych
- 6. Jak mieć ujemne zero zawsze sformatowane jako dodatnie zero w ciągu Pythona?
- 7. Grupa przez wiele jednostek czasu w PANDAS danych ramki
- 8. Pandas Python, jak policzyć liczbę rekordów lub wierszy w ramce danych
- 9. Wykrywanie zdarzeń w ramce danych pandy
- 10. Upuść wszystkie dane w pandasowej ramce danych
- 11. zliczania wystąpień liczbę przez kolumnę w ramce danych Pandy
- 12. Zliczanie unikalnych/różne wartości przez grupę w ramce danych
- 13. Zmienne jakościowe w ramce danych Panda?
- 14. Dodaj brakujący indeks daty w ramce danych
- 15. Konwersja ramki danych Pandy na błąd w ramce danych Spark
- 16. Dodaj dni do dat w ramce danych
- 17. Zmienianie danych w ramce danych z hierarchicznym indeksowaniem
- 18. kolumny Data w ramce danych
- 19. Zamień ciąg w ramce danych
- 20. Upuszczanie kolumn w ramce danych
- 21. Jak znaleźć najwyższą wartość w ramce danych?
- 22. Jak usunąć nagłówek w ramce danych?
- 23. Jak spłaszczyć strukturę w iskrowegowej ramce danych?
- 24. Jak określić brakującą wartość w ramce danych
- 25. Jak połączyć dwa wektory w ramce danych
- 26. gcc: dzielenie przez zero
- 27. Python pandas plastry ramka danych przez wiele zakresów indeksu
- 28. Jak zamienić i dodać element ramek danych przez inną ramkę danych w Pandonie Pythona?
- 29. kreślenie ułożonych prętów na ramce danych pandy
- 30. jak podzielić kolumnę krotek w ramce danych pandy?
Sądzę, że druga linia powinna brzmieć "num [num <0] = 0" – hlin117