質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

16679閲覧

csvファイルの結合について

matt17

総合スコア16

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2018/07/23 12:10

前提・実装したいこと

映画のレコメンド機能を実装中なのですが、二つのデータフレームを組み合わせようと思ったところ、以下のようなエラーが出ました。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

merged = pd.merge(ratings, movie_new)を実行すると
You are trying to merge on int64 and object columns. If you wish to proceed you should use pd.concat
というエラーが出ます。
また、merged = pd.concat(ratings, movie_new)を実行すると、
first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"
というエラーが出ます。

該当のソースコード

merged = pd.merge(ratings, movie_new)
merged = pd.concat(ratings, movie_new)

試したこと

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

たぶんこれじゃないかなぁ。

Python

1merged = pd.concat([ratings, movie_new], axis=1)

投稿2018/07/23 12:16

編集2018/07/24 01:30
tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matt17

2018/07/23 12:22

早速の回答ありがとうございます。 確かにファイルの結合はできました。 ratingsの方のmovieIdと、movie_newの方のmovieIdを結びつけたいのですが、 この方法だと結びつけが行われずそのまま結合されます。 それぞれのmovieIdを結びつけた上で結合するにはどのようにすればよいでしょうか。
tachikoma

2018/07/23 12:26

merged = ratings.merge(movie_new, on="movieId")かな
matt17

2018/07/23 12:31

ratings.mergeだとconcatを使用してくださいとエラーになるので、ratings.concatで実行すると、 'DataFrame' object has no attribute 'concat'というエラーになってしまいます。 なんども申し訳ございません。
tachikoma

2018/07/23 12:33

movieIdのタイプが2つのDataFrameでずれてませんか?片方がIntで片方がobject型になってると思うのですが。
matt17

2018/07/23 12:50

ratingsの方はintになっており、movie_newの方はobject型になっておりました。 どちらもint型にするにはどのようにすればよいでしょうか。
matt17

2018/07/23 12:53

movie_new['movieId'].astype(np.int64)を実行した時 ValueError: invalid literal for int() with base 10: '1997-08-20' このようなエラーが出ます。
tachikoma

2018/07/23 12:58

movie_new['movieId']の中に日付の文字列が入っていますね。これではmergeできないので、元のDataFrameの中身が意図したものになっているかをまず確認してください。つまり、日付になっているのが例外的なのか全部そうなのかの確認をお願いします。
matt17

2018/07/23 13:17

日付になっているものは全て削除しました。そしてどちらもint型に直しました。 しかし、先ほどと同様なエラーが出てしまいます。 何度も申し訳ございません。
tachikoma

2018/07/23 13:29

結合する直前にdf.dtypesでそれぞれのデータフレームの要素の型を確認してみて下さい。astypeでキャストした結果をもとのデータフレームに戻し忘れてるきがしています。
matt17

2018/07/23 13:32

申し訳ございません、movie_newのmovieIdの要素の型をint型にする方法を教えてください。 何度も申し訳ございません。
tachikoma

2018/07/23 13:36

movie_new[‘movieId’] = movie_new[‘movieId’].astype(int)
matt17

2018/07/23 13:39

何度も申し訳ございませんでした。 無事結合できました。本当にありがとうございました。
tachikoma

2018/07/23 13:41

お疲れ様でした〜。
guest

0

Google翻訳

You are trying to merge on int64 and object columns. If you wish to proceed you should use pd.concat

int64とオブジェクトの列をマージしようとしています。 続行したい場合は、pd.concatを使用してください。

first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"

最初の引数はpandasオブジェクトのiterableでなければならず、 "DataFrame"

投稿2018/07/23 12:15

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問