python - 用整数替换 pandas DataFrame 的字符串元素

标签 python string pandas dataframe indexing

我有一个 Pandas 数据框:

   x_axis  y_axis  data
0  Cheese   farms     4
1   wales  Cheese     3

可以用下面的代码生成:

import pandas
cols=['x_axis','y_axis','data']
row1=['Cheese','farms',4]
row2=['wales','Cheese',3]
data=pandas.DataFrame([row1,row2],columns=cols)
print data

实际上我拥有的数据要大得多,xy 轴 是热图的标签。因为这些标签通常非常大,所以我想枚举它们并用索引替换它们(跨越 xy 轴,即如果 cheesex 中是 1 它在 y 轴 中也是 1)。我还需要能够编写将新索引映射到其原始值的图例。

所需的输出可能如下所示:

  x_axis y_axis  data
0      1      2     4
1      3      1     3

那么图例就是:

cheese=1
farms=2
wales=3

任何人都可以给我一些关于如何以编程方式执行此操作的建议吗?

最佳答案

你需要categorical variables .

因为要转换多列的值,所以需要stack()成一个系列,然后调用astype:

>>> s = df.loc[:, ['x_axis', 'y_axis']].stack().astype('category')
>>> s
0  x_axis    Cheese
   y_axis     farms
1  x_axis     wales
   y_axis    Cheese
dtype: category
Categories (3, object): [Cheese, farms, wales]

s 现在是一个具有分类类型的系列:每个唯一的字符串都映射到一个整数。

如果您使用.cat 访问器,您可以获得每个分类变量的整数代码。使用 unstack() 会返回一个 DataFrame:

>>> s.cat.codes.unstack()
   x_axis  y_axis
0       0       1
1       2       0

这意味着您可以使用以下代码将这些整数列分配回原始列:

>>> df.loc[:, ['x_axis', 'y_axis']] = s.cat.codes.unstack()
>>> df
   x_axis  y_axis  data
0       0       1     4
1       2       0     3

字符串到整数的映射由 s.cat.categories 以索引的形式给出(所以 'Cheese' = 0, 'farms' = 1, 'wales' = 2) :

>>> s.cat.categories
Index(['Cheese', 'farms', 'wales'], dtype='object')

关于python - 用整数替换 pandas DataFrame 的字符串元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600354/

相关文章:

php - 如何在 PHP 中对字符串使用 += 运算符?

python - 比较其他 Pandas 数据框每一行的值(value)

python - 如何将数据帧与 pandas 中的冗余行结合起来

python - 矢量化 numpy : check if point is inside sphere?

python - BioPython:使用 Entrez.esummary/Entrez.read 跳过错误的 GID

python 对象不可迭代或不可下标

2 个列表的 Python 组合(1 个重复,1 个不重复)

arrays - Lua中将字符串转换为变量名

c - 我是 C 新手,但收到 "Segmentation Faults"(段错误/SIGSEGV)。为什么?

python - Pandas 数据框过滤