我正在处理分类数据的大型DataFrame,我发现当我在两个数据帧上使用pandas.merge时,任何列的分类数据都会自动向上转换为更大的数据类型.(这可以大大增加RAM消耗.)一个简单的例子来说明:
编辑:做了一个更恰当的例子
import pandas
import numpy
df1 = pandas.DataFrame(
{'ID': [5, 3, 6, 7, 0, 4, 8, 2, 9, 1, 6, 5, 4, 9, 7, 2, 1, 8, 3, 0],
'value1': pandas.Categorical(numpy.random.randint(0, 2, 20))})
df2 = pandas.DataFrame(
{'ID': [5, 3, 6, 7, 0, 4, 8, 2, 9, 1],
'value2': pandas.Categorical(['c', 'a', 'c', 'a', 'c', 'b', 'b', 'a', 'a', 'b'])})
result = pandas.merge(df1, df2, on="ID")
result.dtypes
Out []:
ID int32
value1 int64
value2 object
dtype: object
Run Code Online (Sandbox Code Playgroud)
我希望value1和value2在结果DataFrame中保持分类.转换为对象类型的字符串标签可能特别昂贵.
从https://github.com/pydata/pandas/issues/8938这可能是按预期的?反正有没有避免这个?