gpt4 book ai didi

python - pd.get_dummies 数据帧在 Sparse = True 时与 Sparse = False 时大小相同

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:46 26 4
gpt4 key购买 nike

我有一个包含多个字符串列的数据框,我想将其转换为分类数据,以便我可以运行一些模型并从中提取重要特征。

但是,由于唯一值的数量,单热编码数据会扩展到大量列,从而导致性能问题。

为了解决这个问题,我正在试验 get_dummies 中的 Sparse = True 参数。

test1 = pd.get_dummies(X.loc[:,['col1','col2','col3','col4']].head(10000))
test2 = pd.get_dummies(X.loc[:,['col1','col2','col3','col4']].head(10000),sparse = True)

但是,当我检查我的两个比较对象的信息时,它们占用相同数量的内存。 Sparse = True 使用的空间似乎并没有减少。这是为什么?

test1.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 10000 entries, 537293 to 752152
Columns: 2253 entries,...
dtypes: uint8(2253)
memory usage: 21.6 MB

test2.info()
<class 'pandas.core.sparse.frame.SparseDataFrame'>
Int64Index: 10000 entries, 537293 to 752152
Columns: 2253 entries, ...
dtypes: uint8(2253)
memory usage: 21.9 MB

最佳答案

我看着 Pandas get_dummies源,但到目前为止无法发现错误。这是我在下面做的一个小实验(上半部分是用真实数据重现你的问题)。

In [1]: import numpy as np
...: import pandas as pd
...:
...: a = ['a', 'b'] * 100000
...: A = ['A', 'B'] * 100000
...:
...: df1 = pd.DataFrame({'a': a, 'A': A})
...: df1 = pd.get_dummies(df1)
...: df1.info()
...:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200000 entries, 0 to 199999
Data columns (total 4 columns):
A_A 200000 non-null uint8
A_B 200000 non-null uint8
a_a 200000 non-null uint8
a_b 200000 non-null uint8
dtypes: uint8(4)
memory usage: 781.3 KB

In [2]: df2 = pd.DataFrame({'a': a, 'A': A})
...: df2 = pd.get_dummies(df2, sparse=True)
...: df2.info()
...:
<class 'pandas.core.sparse.frame.SparseDataFrame'>
RangeIndex: 200000 entries, 0 to 199999
Data columns (total 4 columns):
A_A 200000 non-null uint8
A_B 200000 non-null uint8
a_a 200000 non-null uint8
a_b 200000 non-null uint8
dtypes: uint8(4)
memory usage: 781.3 KB

到目前为止,与您的结果相同(df1 的大小等于df2 的大小),但如果我显式转换 df2使用 to_sparsefill_value=0

稀疏
In [3]: df2 = df2.to_sparse(fill_value=0)
...: df2.info()
...:
<class 'pandas.core.sparse.frame.SparseDataFrame'>
RangeIndex: 200000 entries, 0 to 199999
Data columns (total 4 columns):
A_A 200000 non-null uint8
A_B 200000 non-null uint8
a_a 200000 non-null uint8
a_b 200000 non-null uint8
dtypes: uint8(4)
memory usage: 390.7 KB

现在内存使用量减半,因为一半的数据是 0

总之,我不确定为什么 get_dummies(sparse=True) 即使转换为 SparseDataFrame 也不压缩数据帧,但有一个解决方法。相关讨论在github上进行get_dummies with sparse doesn't convert numeric to sparse但结论似乎仍悬而未决。

关于python - pd.get_dummies 数据帧在 Sparse = True 时与 Sparse = False 时大小相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com