【问题标题】:How to keep categories of all variables in pandas?如何在熊猫中保留所有变量的类别?
【发布时间】:2018-11-02 21:59:59
【问题描述】:

我有一个包含数字和分类数据的数据框 (df1)。我正在创建一个类似于第一个数据框 df2 的数据库,这意味着它具有与 df1 相同的列名和 dtypes。但是,除了 df1 的名称和数据类型之外,我还想保留分类变量的类别,即使它们在创建时没有出现在 df2 上。

到目前为止,我发现的最简单的解决方案是遍历 df2 上的所有分类变量,添加 df1 的每个分类变量的类别。但是,我相信必须有一种比我提议的解决方案更快/更有效的解决方案。

df1 = pd.DataFrame({
'A' : pd.Categorical(list('bbeebbaa'), categories=['e','a','b'], ordered=True),
'B' : [1,2,1,2,2,1,2,1],
'C' : pd.Categorical(list('ddeeccaa'), categories=['e','a','d', 'c'], ordered=True)})

df2 = pd.DataFrame({
'A' : pd.Categorical(list('bbeebbbb'), categories=['e', 'b'], ordered=True),
'B' : [1,2,1,2,2,1,2,1],
'C' : pd.Categorical(list('cccccccc'), categories=['c'], ordered=True)})

categorical = ['A', 'B']
for var in categorical:
    df2[var] = df2[var].cat.add_categories(df1[var].cat.categories)

【问题讨论】:

  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 On topichow to ask... the perfect question 在此处申请。 StackOverflow 不是设计、编码、研究或教程资源。但是,如果您遵循您在网上找到的任何资源,进行诚实的编码尝试并遇到问题,那么您将有一个很好的示例可以发布。
  • 简而言之,只需向我们展示一些示例输入,足以说明您的问题,以及到目前为止您可以解决它的代码。我们很乐意为您已经尝试过的代码提供帮助,但我们不会从第 1 阶段开始解决问题。

标签: python pandas dataframe


【解决方案1】:

如果df2的所有类别都在df1中,可以使用set_categories()函数。

l = list(df1['A'].cat.categories)
df2['A'] = df2['A'].cat.set_categories(l)

或者在一行中:

df2['A'] = df2['A'].cat.set_categories(list(df1['A'].cat.categories))

如果 df1 和 df2 都包含它们独有的类别,我不确定我将如何处理它 - 可能类似于您在此处介绍的方式。

【讨论】:

  • 谢谢罗伯特,但是您提出的解决方案一次只针对一个变量,因此在这种情况下也必须完成循环。我想没有循环就没有办法做到这一点。
猜你喜欢
  • 2023-02-12
  • 2015-11-23
  • 2015-02-15
  • 2023-02-18
  • 2017-03-01
  • 2017-08-13
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
相关资源
最近更新 更多