将数字值从dict添加到Pandas DataFrame中的新列

时间:2017-11-22 16:30:03

标签: python-3.x pandas dataframe

我正在练习机器学习并使用电影/评级数据集。我正在尝试在数据框中创建一个新列,以数字方式标识每个类型(大约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)

1 个答案:

答案 0 :(得分:1)

我无权发表评论。这是处理数据集中的分类值的建议和正确的过程。您可以使用内置sklearn.preprocessing.OneHotEncoder功能来完成您想要完成的工作 为了更好地理解示例,请查看此One Hot Encode Sequence Data in Python。如果这对您有用,请告诉我。