Pandas将字符串类型的Pandas Series转换为唯一的整数ID
在本文中,我们将介绍如何将Pandas Series中的字符串类型转换为唯一的整数ID。这可以在数据分析和机器学习中非常有用,特别是在建模之前需要将数据进行预处理的情况下。
阅读更多:Pandas 教程
代码示例
首先,我们将使用以下代码生成一个简单的Pandas Series:
import pandas as pd
data = pd.Series(['apple', 'banana', 'orange', 'banana', 'orange'])
接下来,我们需要将这个Series中的字符串类型转换为唯一的整数ID。我们可以使用Pandas中的pd.factorize()函数实现这一目的。此函数将字符串类型转换为整数类型,并返回两个值:第一个值是转换后的整数类型Series,第二个值是转换后的唯一字符串列表。
data_encoded, data_categories = pd.factorize(data)
通过这种方法,我们获得了一个唯一的整数类型Series data_encoded,其中每个字符串类型都被转换成了一个整数ID。同时,变量data_categories包含唯一字符串列表,每个字符串都与一个唯一的整数ID相关联。
我们可以用以下代码输出这些结果:
print(data_encoded)
# Output:
# [0 1 2 1 2]
print(data_categories)
# Output:
# ['apple', 'banana', 'orange']
因此,我们可以看到,唯一的整数ID序列是[0, 1, 2, 1, 2],对应的唯一字符串列表是['apple', 'banana', 'orange']。
如何在DataFrame中使用
如果我们要在DataFrame中使用这个唯一的整数ID序列,我们可以使用pd.DataFrame()函数将其转换为一个新的DataFrame列:
df = pd.DataFrame(data, columns=['fruits'])
df['fruits_id'] = data_encoded
这将在DataFrame中创建一个新的列fruits_id,其中包含了Pandas Series中字符串类型的唯一整数ID。
处理缺失值
如果我们的Pandas Series包含了一些缺失值,我们可以使用pd.Categorical()函数将其转换为包含缺失值的唯一字符串列表:
data_with_missing = pd.Series(['apple', 'banana', 'orange', None, 'orange'])
data_encoded, data_categories = pd.factorize(pd.Categorical(data_with_missing))
这样做将生成一个包括NaN的唯一字符串列表,并将其转换为整数类型。
转换多列数据
如果我们需要转换整个DataFrame中多列数据的字符串类型为整数类型的唯一ID,我们可以使用以下代码:
df = pd.DataFrame({'fruits': ['apple', 'banana', 'orange', 'banana', 'orange'],
'vegetables': ['carrot', 'potato', 'celery', 'onion', 'celery']})
categories = {}
for column in df.columns:
encoded, categories[column] = pd.factorize(df[column])
df[column + '_id'] = encoded
print(df)
这将生成一个新的DataFrame,其中包括原始列和每列对应的整数类型列。
总结
通过使用pd.factorize()函数,我们可以将Pandas Series中的字符串类型转换为唯一的整数ID。这对于处理数据集和进行机器学习建模非常有用。该技巧还可以扩展到DataFrame中的多列数据的预处理。
极客笔记