模型 Pandas 数据框列作为类别列表
Model Pandas Data Frame column as List of Category
我想减少 Pandas dataframe
的内存输出。
我正在解析一个 Json,其中一些列是多值类别列表,例如:
querySelectedBrands":["b1","b2","b3"]
这会自动推断为 'object' 列,但理想情况下是类别列表。
每当我有一个单值分类列时,进行转换就非常简单:
interactions[col] = interactions[col].astype('category')
但是我想将类型设置为类别列表的列呢?
稍后我将对该列进行编码,将其转换为一系列布尔列,因此我不确定转换为 'category' 列表的初始内存优势是否会有益。
谢谢!
不,这不可能
使用 Pandas 系列来保存列表是不可取的,因为它总是 dtype object
并且表示指向任意类型的指针。因此,对此类系列的操作将不可矢量化,并且会附加内存开销。
另一种选择
如果您在每个列表中都有一定数量的项目,您可以将列表系列拆分为多个系列,请参阅 。然后让每个系列成为分类:
for col in ['col1', 'col2', 'col3']:
df[col] = df[col].astype('category')
我想减少 Pandas dataframe
的内存输出。
我正在解析一个 Json,其中一些列是多值类别列表,例如:
querySelectedBrands":["b1","b2","b3"]
这会自动推断为 'object' 列,但理想情况下是类别列表。 每当我有一个单值分类列时,进行转换就非常简单:
interactions[col] = interactions[col].astype('category')
但是我想将类型设置为类别列表的列呢? 稍后我将对该列进行编码,将其转换为一系列布尔列,因此我不确定转换为 'category' 列表的初始内存优势是否会有益。 谢谢!
不,这不可能
使用 Pandas 系列来保存列表是不可取的,因为它总是 dtype object
并且表示指向任意类型的指针。因此,对此类系列的操作将不可矢量化,并且会附加内存开销。
另一种选择
如果您在每个列表中都有一定数量的项目,您可以将列表系列拆分为多个系列,请参阅
for col in ['col1', 'col2', 'col3']:
df[col] = df[col].astype('category')