当前位置: 首页 > 面试题库 >

在Pandas数据框中转换分类数据

朱毅
2023-03-14
问题内容

我有一个具有此类数据的数据框(列过多):

col1        int64
col2        int64
col3        category
col4        category
col5        category

列看起来像这样:

Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]

我想像这样将列中的所有值转换为整数:

[1, 2, 3, 4, 5, 6, 7, 8]

我通过以下方法解决了这一问题:

dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes

现在,我的数据框中有两列-旧列col3和新c列,需要删除旧列。

那是不好的做法。它是可行的,但是在我的数据框中有很多列,我不想手动进行。

pythonic如何巧妙地实现呢?


问题答案:

首先,要将“分类”列转换为其数字代码,可以使用以下命令更轻松地做到这一点dataframe['c'].cat.codes
此外,可以使用来自动选择数据框中具有特定dtype的所有列select_dtypes。这样,您可以将以上操作应用于多个自动选择的列。

首先制作一个示例数据框:

In [75]: df = pd.DataFrame({'col1':[1,2,3,4,5], 'col2':list('abcab'),  'col3':list('ababb')})

In [76]: df['col2'] = df['col2'].astype('category')

In [77]: df['col3'] = df['col3'].astype('category')

In [78]: df.dtypes
Out[78]:
col1       int64
col2    category
col3    category
dtype: object

然后,通过使用select_dtypes选择列,然后将其应用于.cat.codes这些列中的每一个,您可以获得以下结果:

In [80]: cat_columns = df.select_dtypes(['category']).columns

In [81]: cat_columns
Out[81]: Index([u'col2', u'col3'], dtype='object')

In [83]: df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)

In [84]: df
Out[84]:
   col1  col2  col3
0     1     0     0
1     2     1     1
2     3     2     0
3     4     0     1
4     5     1     1


 类似资料:
  • 问题内容: 我正在尝试将Pandas DF转换为Spark one。DF头: 码: 我得到一个错误: 问题答案: 您需要确保您的pandas dataframe列适合spark推断的类型。如果您的熊猫数据框列出类似以下内容: 而且您遇到该错误,请尝试: 现在,确保实际上是您希望这些列成为的类型。基本上,当底层Java代码尝试从python中的对象推断类型时,它会使用一些观察值并做出猜测,如果该猜测

  • 问题内容: 我有一个如下的Pandas DataFrame TimeReviewed是系列类型 我已经在下面尝试过,但是它仍然没有改变Series类型 如何将df.TimeReviewed更改为DateTime类型并分别拉出年,月,日,时,分,秒?我是python的新手,感谢您的帮助。 问题答案: 您不能:按定义列是。也就是说,如果使(所有元素的类型)类似日期时间,则可以通过访问器(docs)访问

  • 问题内容: 我试图将输出转换为熊猫数据框,但我很努力。我有这个清单 我想创建一个具有3列和3行的熊猫数据框。我尝试使用 但它似乎对我不起作用。任何帮助,将不胜感激。 问题答案: 您需要转换为然后:

  • 问题内容: 我对知道如何将熊猫数据框转换为NumPy数组感兴趣。 数据框: 给 我想将其转换为NumPy数组,如下所示: 我怎样才能做到这一点? 作为奖励,是否可以像这样保留dtype? 或类似的? 问题答案: 要将pandas数据框(df)转换为numpy ndarray,请使用以下代码:

  • 问题内容: 我需要将列表转换为一列熊猫数据框 当前列表(len = 3): 所需的熊猫DF(形状= 3,): 请注意,这些数字代表上述“必需熊猫” DF中的索引。 问题答案: 采用: 谢谢DYZ:

  • 问题内容: 我正在从一列存储为JSON的数据库(超过5万行)中读取数据。我想将其提取到pandas数据框中。下面的代码片段可以正常工作,但是效率很低,并且在对整个数据库运行时会花费很多时间。请注意,并非所有项目都具有相同的属性,并且JSON具有一些嵌套的属性。 我怎样才能使它更快? 问题答案: json_normalize接受一个已经处理过的json字符串或一系列这样的字符串。 设定