Gấu trúc Python - Dữ liệu thưa thớt

Đối tượng thưa thớt được “nén” khi bất kỳ dữ liệu nào khớp với một giá trị cụ thể (NaN / giá trị bị thiếu, mặc dù có thể chọn bất kỳ giá trị nào). Một đối tượng SparseIndex đặc biệt theo dõi vị trí dữ liệu đã được "chia nhỏ". Điều này sẽ có ý nghĩa hơn trong một ví dụ. Tất cả các cấu trúc dữ liệu Pandas tiêu chuẩn đều áp dụngto_sparse phương pháp -

import pandas as pd
import numpy as np

ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts

Nó là output như sau -

0   -0.810497
1   -1.419954
2         NaN
3         NaN
4         NaN
5         NaN
6         NaN
7         NaN
8    0.439240
9   -1.095910
dtype: float64
BlockIndex
Block locations: array([0, 8], dtype=int32)
Block lengths: array([2, 2], dtype=int32)

Các đối tượng thưa thớt tồn tại vì lý do hiệu quả của bộ nhớ.

Bây giờ chúng tôi giả sử bạn có một NA DataFrame lớn và thực thi đoạn mã sau:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10000, 4))
df.ix[:9998] = np.nan
sdf = df.to_sparse()

print sdf.density

Nó là output như sau -

0.0001

Bất kỳ đối tượng thưa thớt nào cũng có thể được chuyển đổi trở lại dạng dày đặc tiêu chuẩn bằng cách gọi to_dense -

import pandas as pd
import numpy as np
ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts.to_dense()

Nó là output như sau -

0   -0.810497
1   -1.419954
2         NaN
3         NaN
4         NaN
5         NaN
6         NaN
7         NaN
8    0.439240
9   -1.095910
dtype: float64

Loại thưa thớt

Dữ liệu thưa thớt phải có cùng loại với kiểu biểu diễn dày đặc của nó. Hiện tại,float64, int64booldtypesđược hỗ trợ. Tùy thuộc vào bản gốcdtype, fill_value default thay đổi -

  • float64 - np.nan

  • int64 - 0

  • bool - Sai

Hãy để chúng tôi thực thi đoạn mã sau để hiểu như vậy -

import pandas as pd
import numpy as np

s = pd.Series([1, np.nan, np.nan])
print s

s.to_sparse()
print s

Nó là output như sau -

0   1.0
1   NaN
2   NaN
dtype: float64

0   1.0
1   NaN
2   NaN
dtype: float64