Pandas 희소 데이터 구조의 실현
데이터 에 NaN 값 이 많 으 면 저장 하면 공간 이 낭비 된다.이 문 제 를 해결 하기 위해 Pandas 는 이러한 NaN 의 값 을 효과적으로 저장 하기 위해 Sparse data 라 는 구 조 를 도입 했다.
Spare data 의 예
우 리 는 배열 을 만 든 다음 대부분의 데 이 터 를 NaN 으로 설정 하고 이 배열 을 사용 하여 SparseArray 를 만 듭 니 다.
In [1]: arr = np.random.randn(10)
In [2]: arr[2:-2] = np.nan
In [3]: ts = pd.Series(pd.arrays.SparseArray(arr))
In [4]: ts
Out[4]:
0 0.469112
1 -0.282863
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 -0.861849
9 -2.104569
dtype: Sparse[float64, nan]
여기 dtype 형식 은 Sparse[float 64,nan]입 니 다.배열 에 있 는 nan 은 실제로 저장 되 지 않 고 nan 이 아 닌 데이터 만 저장 되 며 이 데이터 의 유형 은 float 64 입 니 다.SparseArray
arrays.SparseArray 는 하나 입 니 다. ExtensionArray ,희소 한 배열 형식 을 저장 하 는 데 사용 합 니 다.
In [13]: arr = np.random.randn(10)
In [14]: arr[2:5] = np.nan
In [15]: arr[7:8] = np.nan
In [16]: sparr = pd.arrays.SparseArray(arr)
In [17]: sparr
Out[17]:
[-1.9556635297215477, -1.6588664275960427, nan, nan, nan, 1.1589328886422277, 0.14529711373305043, nan, 0.6060271905134522, 1.3342113401317768]
Fill: nan
IntIndex
Indices: array([0, 1, 5, 6, 8, 9], dtype=int32)
numpy.asarray()사용 하기 일반 배열 로 변환 할 수 있 습 니 다:
In [18]: np.asarray(sparr)
Out[18]:
array([-1.9557, -1.6589, nan, nan, nan, 1.1589, 0.1453,
nan, 0.606 , 1.3342])
SparseDtypeSparseD type 은 Spare 타 입 을 나 타 냅 니 다.이것 은 두 가지 정 보 를 포함 하 는데 첫 번 째 는 NaN 값 이 아 닌 데이터 형식 이 고 두 번 째 는 채 울 때의 상수 값 입 니 다.예 를 들 어 nan:
In [19]: sparr.dtype
Out[19]: Sparse[float64, nan]
아래 와 같이 SparseD type 을 만 들 수 있 습 니 다.
In [20]: pd.SparseDtype(np.dtype('datetime64[ns]'))
Out[20]: Sparse[datetime64[ns], NaT]
채 울 값 을 지정 할 수 있 습 니 다:
In [21]: pd.SparseDtype(np.dtype('datetime64[ns]'),
....: fill_value=pd.Timestamp('2017-01-01'))
....:
Out[21]: Sparse[datetime64[ns], Timestamp('2017-01-01 00:00:00')]
Sparse 의 속성sparse 를 통 해 sparse 에 접근 할 수 있 습 니 다:
In [23]: s = pd.Series([0, 0, 1, 2], dtype="Sparse[int]")
In [24]: s.sparse.density
Out[24]: 0.5
In [25]: s.sparse.fill_value
Out[25]: 0
Sparse 의 계산np 의 계산 함 수 는 SparseArray 에 직접 사용 할 수 있 으 며,SparseArray 를 되 돌려 줍 니 다.
In [26]: arr = pd.arrays.SparseArray([1., np.nan, np.nan, -2., np.nan])
In [27]: np.abs(arr)
Out[27]:
[1.0, nan, nan, 2.0, nan]
Fill: nan
IntIndex
Indices: array([0, 3], dtype=int32)
SparseSeries 와 SparseDataFrameSparseSeries 와 SparseDataFrame 은 1.0.0 버 전에 서 삭제 됐다.그들 을 대신 한 것 은 기능 이 더 강 한 SparseArray 다.
둘 의 사용 상의 차 이 를 살 펴 보 자.
# Previous way
>>> pd.SparseDataFrame({"A": [0, 1]})
# New way
In [31]: pd.DataFrame({"A": pd.arrays.SparseArray([0, 1])})
Out[31]:
A
0 0
1 1
Scipy 의 sparse 매트릭스 라면 DataFrame.sparse.from 을 사용 할 수 있 습 니 다.spmatrix() :
# Previous way
>>> from scipy import sparse
>>> mat = sparse.eye(3)
>>> df = pd.SparseDataFrame(mat, columns=['A', 'B', 'C'])
# New way
In [32]: from scipy import sparse
In [33]: mat = sparse.eye(3)
In [34]: df = pd.DataFrame.sparse.from_spmatrix(mat, columns=['A', 'B', 'C'])
In [35]: df.dtypes
Out[35]:
A Sparse[float64, 0]
B Sparse[float64, 0]
C Sparse[float64, 0]
dtype: object
Pandas 희소 데이터 구조의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Pandas 희소 데이터 구조 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Pandas의 DataFrame 스왑 열 순서 방법 구현1. DataFrame 열 레이블 가져오기 ['ps_state-stopped', 'ps_state-running', 'ps_state-blocked', 'ps_state-paging', 'ps_state-sleepi...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.