我正在练习机器学习并使用电影/评级数据集。我正在尝试在数据框中创建一个新列,以数字方式标识每个类型(大约1300个)。我的逻辑是创建一个独特类型的字典,并用整数标记。然后创建一个for循环来遍历数据帧的每一行,检查每个行的类型,然后将其适当的值分配给名为" genre_Id"的新列。然而,这导致了一个无限循环,我甚至无法打破ctrl-c。在Jupyter中工作时遇到同样的问题(中断内核无法阻止它)。以下是我的方法的总结版本。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
movies_data = pd.read_csv("C://mypython/moviedata/movies.csv")
ratings_data = pd.read_csv("C://mypython/moviedata/ratings.csv")
joined = pd.merge(movies_data,ratings_data, how = 'inner', on=['movieId'])
print(joined.head())
pd.options.display.float_format = '{:,.2f}'.format
genres = joined['genres'].unique()
genre_dict = {}
Id = 1
for i in genres:
genre_dict[i] = Id
Id += 1
joined['genre_id'] = 0
increment = 0
for i in joined['genres']:
if i in genre_dict:
joined['genre_id'][increment] = genre_dict[i]
increment += 1
我知道我应该采用较小的样本来处理,因为数据集中有大约20,000,000行,但我想我会尝试将其作为练习。 我还从复制警告中收到了#34;设置值"虽然这对我的其他项目过去没有引起我的问题。任何关于如何做到这一点的想法将不胜感激。
编辑使用系列地图功能找到解决方案。
加入[' genre_id'] = joined.genres.map(genre_dict)
答案 0 :(得分:1)
我无权发表评论。这是处理数据集中的分类值的建议和正确的过程。您可以使用内置sklearn.preprocessing.OneHotEncoder功能来完成您想要完成的工作 为了更好地理解示例,请查看此One Hot Encode Sequence Data in Python。如果这对您有用,请告诉我。