gpt4 book ai didi

python - 使用 pandas 和 numpy 将字符串类别映射到数字

转载 作者:太空狗 更新时间:2023-10-30 01:57:09 26 4
gpt4 key购买 nike

我有一个数据数组,每行代表一个数据样本(5 个样本),每列代表数据中的一个特征(每个样本 6 个特征)

我正在尝试量化每列包含的状态数,然后将它们映射到一组数字。仅当该列当前不是数字时才应执行此操作。

这个通过例子更容易解释:

示例输入(输入类型为 numpy.ndarray):

In = array([['x', 's', 3, 'k', 's', 'u'],
['x', 's', 2, 'n', 'n', 'g'],
['b', 's', 0, 'n', 'n', 'm'],
['k', 'y', 1, 'w', 'v', 'l'],
['x', 's', 2, 'o', 'c', 'l']], dtype=object)

第一列

curr_column = 0
colset = set()
for row in In:
curr_element = row[curr_column]
if curr_element not in colset:
colset.add(curr_element)

#now colset = {'x', 'b', 'k'} so 3 possible states
collist = list(colset) #make it indexible
coldict = {}
for i in range(len(collist)):
coldict[collist[i]] = i

这会生成一个字典,因此我现在可以重新创建原始数据:(假设 coldict = {'x':0, 'b':1, 'k':2})

for i in range(len(In)): #loop over each row
curr_element = In[i][curr_column] #get current element
In[i][curr_column] = coldict[curr_element] #use it to find the numerical value
'''
now
In = array([[0, 's', 3, 'k', 's', 'u'],
[0, 's', 2, 'n', 'n', 'g'],
[1, 's', 0, 'n', 'n', 'm'],
[2, 'y', 1, 'w', 'v', 'l'],
[0, 's', 2, 'o', 'c', 'l']], dtype=object)
'''

现在对每一列重复该过程。

我知道我可以通过一次遍历数据集填充所有列字典,然后在一个循环中替换所有值来加快速度。为了让流程更清晰,我将其省略。

这在空间和时间上都非常低效,并且在大数据上需要花费大量时间,该算法可以在哪些方面得到改进? numpy 或 pandas 中是否有映射函数可以完成此任务或帮助我?

我考虑过类似的东西

np.unique(Input, axis=1)

但我需要它是可移植的,并不是每个人都有 1.13.0 开发人员版本的 numpy。

此外,我如何区分数字列和非数字列来决定我应该将其应用于哪些列?

最佳答案

Pandas 还有一个 map 功能供您使用。因此,例如,如果您有将字符串映射到代码的字典:

codes = {'x':0, 'b':1, 'k':2}

您可以使用 map 函数映射 pandas 数据框中的列:

df[col] = df[col].map(codes)

关于python - 使用 pandas 和 numpy 将字符串类别映射到数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43882652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com