[PYTHON] 팬더 데이터 프레임의 음수를 0으로 대체하는 방법
PYTHON팬더 데이터 프레임의 음수를 0으로 대체하는 방법
나는 모든 DataFrame 음수를 0으로 대체하는 방법이 있는지 알고 싶습니다.
해결법
-
==============================
1.모든 열이 숫자 인 경우 부울 식 색인을 사용할 수 있습니다.
모든 열이 숫자 인 경우 부울 식 색인을 사용할 수 있습니다.
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
보다 일반적인 경우이 대답은 private 메소드 인 _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
부울 인덱싱은 timedelta 유형을 사용하면 데이터 프레임 전체가 아닌 별도의 열에서 작동하는 것처럼 보입니다. 그렇게 할 수 있습니다.
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
업데이트 : pd.Timedelta와의 비교는 전체 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
-
==============================
2.이 작업을 수행하는 또 다른 간결한 방법은 pandas.DataFrame.clip입니다.
이 작업을 수행하는 또 다른 간결한 방법은 pandas.DataFrame.clip입니다.
예 :
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
df.clip_lower (0)도 있습니다.
-
==============================
3.아마 당신은 판다를 사용할 수 있습니다. (args)
아마 당신은 판다를 사용할 수 있습니다. (args)
data_frame = data_frame.where(data_frame < 0, 0)
-
==============================
4.커다란 df (40m x 700m)를 다루는 경우, 열과 같은 것을 반복하여 훨씬 빠르게 그리고 메모리에 익숙해집니다.
커다란 df (40m x 700m)를 다루는 경우, 열과 같은 것을 반복하여 훨씬 빠르게 그리고 메모리에 익숙해집니다.
for col in df.columns: df[col][df[col] < 0] = 0
from https://stackoverflow.com/questions/27759084/how-to-replace-negative-numbers-in-pandas-data-frame-by-zero by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬의 부분 일치 사전 키 (튜플 중) (0) | 2018.11.26 |
---|---|
[PYTHON] 프로세스간에 클래스를 공유하려면 어떻게해야합니까? (0) | 2018.11.26 |
[PYTHON] SciPy를 사용한 베 지어 커브 피팅 (0) | 2018.11.26 |
[PYTHON] OperationalError : (OperationalError) (2003, " '192.168.129.139'(111) '의 MySQL 서버에 연결할 수 없음) 없음 없음 (0) | 2018.11.26 |
[PYTHON] 셀레늄 python find_element_by_class_name () v 2.2에서 작동을 중지 2.21 - '복합 클래스 이름'을 사용할 수 없습니다. (0) | 2018.11.26 |