用整数替换 pandas DataFrame 的字符串元素
Posted
技术标签:
【中文标题】用整数替换 pandas DataFrame 的字符串元素【英文标题】:Replacing string elements of a pandas DataFrame with integers 【发布时间】:2016-08-04 15:56:53 【问题描述】:我有一个熊猫数据框:
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
实际上,我拥有的数据要大得多,x
和 y axis
是热图的标签。因为这些标签通常非常大,我想枚举它们并用索引替换它们(跨越x
和y axes
即如果cheese
是1
在x
它也是1
在@ 987654331@)。我还需要能够编写一个将新索引映射到其原始值的图例。
所需的输出可能如下所示:
x_axis y_axis data
0 1 2 4
1 3 1 3
那么传说是:
cheese=1
farms=2
wales=3
谁能给我一些关于如何以编程方式执行此操作的建议?
【问题讨论】:
您的映射可能不完全清楚。如果有重复行,例如附加行 row3=['Bread','wales',3],会发生什么? 嗨 tfv,所以“面包”总是 4(例如)而 wales 总是 5 - 无论列如何 【参考方案1】:你需要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')
【讨论】:
以上是关于用整数替换 pandas DataFrame 的字符串元素的主要内容,如果未能解决你的问题,请参考以下文章
用字典值替换 Pandas Dataframe 中的部分字符串
用 Pandas DataFrame 中出现频率最高的单词替换单元格
Python Pandas Dataframe 用同一会话的另一个单元格的值替换单元格值
用 True/False 替换 pandas 数据框所有列的整数
pandas使用replace函数替换dataframe中的值:replace函数使用正则表达式对dataframe中的值进行替换