如何确定性地将Pandas字符串列转换为特定的数字?

5us2dqdw  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(202)

我在这里问了一个类似的问题,并感谢社区的帮助。
我遇到了一个问题,我想将dataframe字符串转换为数字。这次我不能手动将字符串Map到数字,因为这一列实际上很长(下面的例子只是一个最小的例子)。限制是每次重复相同的字符串时,数字应该是相同的。
我尝试使用pd.to_numeric,但它给了我一个错误-

import pandas as pd
data = [['mechanical@engineer', 'Works on machines'], ['field engineer', 'Works on pumps'],
        ['lab_scientist', 'Publishes papers'], ['field engineer', 'Works on pumps'],
        ['lab_scientist','Publishes papers']]# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['Job1', 'Description'])
role_to_code = {"mechanical@engineer": 0, "field engineer": 1, "lab_scientist": 2}

df['Job1'] = df['Job1'].map(role_to_code)

print(df.head())

df['Description'] = pd.to_numeric(df['Description'])

以下是错误-

ValueError: Unable to parse string "Works on machines" at position 0

根据类似的SO帖子,上述错误的解决方案是指定一个分隔符。但由于数据集非常大,我不想指定多个分隔符。有没有方法可以自动化这个过程?

kulphzqa

kulphzqa1#

IIUC,有一个pandas builtin 可以做到这一点:factorize
pandas.factorize(值,排序=假,使用_na_sentinel=真,大小提示=无)
* 将对象编码为枚举类型或分类变量。*
此方法对于获取数组的数字表示非常有用,因为所有重要的事情都是标识不同的值。

df["Description_new"] = pd.factorize(df['Description'])[0]

输出:

print(df)

   Job1        Description  Description_new
0     0  Works on machines                0
1     1     Works on pumps                1
2     2   Publishes papers                2
3     1     Works on pumps                1
4     2   Publishes papers                2
rkttyhzu

rkttyhzu2#

如果你想将“Description”列中的字符串编码为数字,你可以使用scikit-learn的LabelEncoder类,它会将每个唯一的字符串编码为唯一的整数值。

from sklearn.preprocessing import LabelEncoder

# Create a LabelEncoder object
le = LabelEncoder()

# Fit the encoder on the 'Description' column and transform the column
df['Description'] = le.fit_transform(df['Description'])

请注意,整数值是任意的,不具有任何特定含义。
如果要将特定字符串Map到特定整数值,可以使用字典和map方法,就像处理'Job 1'列一样:

description_to_code = {"Works on machines": 0, "Works on pumps": 1, "Publishes papers": 2}
df['Description'] = df['Description'].map(description_to_code)

相关问题