2013-04-04 164 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) 

看看您的合併現在的作品。