我在这里问了一个类似的问题,并感谢社区的帮助。
我遇到了一个问题,我想将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帖子,上述错误的解决方案是指定一个分隔符。但由于数据集非常大,我不想指定多个分隔符。有没有方法可以自动化这个过程?
2条答案
按热度按时间kulphzqa1#
IIUC,有一个pandas builtin 可以做到这一点:
factorize
。pandas.factorize
(值,排序=假,使用_na_sentinel=真,大小提示=无)* 将对象编码为枚举类型或分类变量。*
此方法对于获取数组的数字表示非常有用,因为所有重要的事情都是标识不同的值。
输出:
rkttyhzu2#
如果你想将“Description”列中的字符串编码为数字,你可以使用scikit-learn的LabelEncoder类,它会将每个唯一的字符串编码为唯一的整数值。
请注意,整数值是任意的,不具有任何特定含义。
如果要将特定字符串Map到特定整数值,可以使用字典和map方法,就像处理'Job 1'列一样: