2013-04-04 109 views
2

我通过韦斯麦金尼的的Python数据分析学习Python和大熊猫。第2章中的一个示例是movie_id中MovieLens数据的合并,该数据无效。我认为问题在于,在评级中,movie_id是一个int64,在电影中它是一个对象。合并返回一个空的数据框。熊猫据帧合并问题

我看了一些关于熊猫和自动数据类型分配以前的职位,发现pandas.io.parsers.read_table文档中的D型,但不能获得类型改变。

原始代码:

mnames = ['movie_id', 'title', 'genres'] 
movies = pd.read_table('ch02/movielens/movies.dat', sep='::', header=None, names=mnames) 

什么我的研究表明什么应该工作:

movies = pd.read_table('ch02/movielens/movies.dat', sep='::', header=None, names=mnames, dtype={'movie_id':np.int64}) 

不幸的是,该类型不发生变化,合并仍然会返回一个空集。我正在大熊猫0.10.1

+0

FWIW书代码适合我。要排除一个固定的错误,你能否确认你正在运行熊猫0.10.1? – DSM 2013-04-04 13:10:33

+0

在[83]: 进口大熊猫 打印 “熊猫版本:”,熊猫.__ version__ 熊猫版本:0.10.1 – wayne 2013-04-04 13:36:03

+0

奇怪,然后。我在影片数据框中的'movie_id'系列是'Name:movie_id,Length:3883,dtype:int64',看起来是正确的,并且合并的行为与您期望的相同。 – DSM 2013-04-04 13:39:59

回答

2

(注意:我没有看过那本书代码,只需您的文章)

首先确认dtypes:

print ratings_df.dtypes 
print movies_df.dtypes 

如果你发现它们是不同的类型,你可以尝试(假设ratings_df.movi​​e_id的对象,而不是INT):

ratings_df.movie_id = ratings_df.movie_id.astype(int) 

看看您的合并现在的作品。