🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

215閲覧

pythonのpandasを使用したcsvファイルのmergeについて

huuuuuuu

総合スコア8

CSV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/11 10:30

編集2019/11/11 11:53

元のcsvファイル(defaultlist.csv)とcsvファイル(list.csv)に共通項(共通列)がある場合に、共通項(共通列)を基に必要な列のみをmergeしたいです。

(defaultlist.csv)
x,y,botime,detime,eldid,firev
-11321.9,-44284,0.923816,1.03909,1298,100
-11716.1,-46828.7,0.517662,0.642548,230,100
-13105.5,-42740,1.63526,2.23617,1536,100
-10864.5,-46901.3,0.997993,1.27049,668,100
-11289,-42056,0.339593,0.358477,1483,100

(list.csv)
id,x,y,botime,eldid,firev
16286,-11321.93241,-44284.03799,0.923815815,1298,100
32609,-11716.08336,-46828.74978,0.517662273,230,100
48749,-13105.50194,-42739.96373,1.635260958,1536,100
32073,-10864.52666,-46901.30895,0.997993477,668,100
100942,-11289.04291,-42056.04607,0.339593457,1483,100

この2つの共通項botimeを基にlist.csvにdefault.csvのdetime列のみを追加したいです。

python

1import pandas as pd 2 3df = pd.read_csv("defaultlist_.csv") 4df2 = pd.read_csv("list.csv") 5 6new_file = "list_.csv" 7results = df.merge(df2,on="botime") 8results.to_csv(new_file,index=False)

を実行したところ、エラーメッセージはないのですが、
新たな出力ファイルに出力されたデータは以下のようになってしまいました。

x_x,y_x,botime,detime,eldid_x,firev_x,id,x_y,y_y,eldid_y,firev_y

もしくはdefaultlist.csvのdetimeをそのままlist.csvにコピーすることは可能でしょうか?

上記スクリプトをどのように改善したらよろしいでしょうか。
ご教授の程、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

※2つのcsvでbotimeの小数点以下の桁が異なっていたので合わせました。

Python

1import pandas as pd 2import io 3 4a= """ 5id,x,y,botime,eldid,firev 616286,-11321.93241,-44284.03799,0.923815815,1298,100 732609,-11716.08336,-46828.74978,0.517662273,230,100 848749,-13105.50194,-42739.96373,1.635260958,1536,100 932073,-10864.52666,-46901.30895,0.997993477,668,100 10100942,-11289.04291,-42056.04607,0.339593457,1483,100 11""" 12 13b = """ 14x,y,botime,detime,eldid,firev 15-11321.9,-44284,0.923816,1.03909,1298,100 16-11716.1,-46828.7,0.517662,0.642548,230,100 17-13105.5,-42740,1.63526,2.23617,1536,100 18-10864.5,-46901.3,0.997993,1.27049,668,100 19-11289,-42056,0.339593,0.358477,1483,100 20""" 21 22df = pd.read_csv(io.StringIO(a)) 23df2 = pd.read_csv(io.StringIO(b)) 24df['botime'] = df['botime'].round(6) 25 26df3 = df2[['botime','detime']] 27 28print(df.merge(df3, on='botime',how='left')) 29# id x y botime eldid firev detime 30#0 16286 -11321.93241 -44284.03799 0.923816 1298 100 1.039090 31#1 32609 -11716.08336 -46828.74978 0.517662 230 100 0.642548 32#2 48749 -13105.50194 -42739.96373 1.635261 1536 100 NaN 33#3 32073 -10864.52666 -46901.30895 0.997993 668 100 1.270490 34#4 100942 -11289.04291 -42056.04607 0.339593 1483 100 0.358477

投稿2019/11/11 13:20

meg_

総合スコア10739

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

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

huuuuuuu

2019/11/11 13:28 編集

ありがとうございます。 一点お聞きしたいのですが、 マージした結果のid48749のdetimeがNaNとなっているのを改善するためにはどのような手段があるでしょうか? 2つのcsvファイルのbotimeは対応しております。(同じ値です。) よろしくお願い致します。
meg_

2019/11/12 11:16

list.csvのbotimeの値は「1.635260958」でdefaultlist.csvのbotimeの値は「1.63526」かと思います。 1.635260958を上記コードのように丸めると1.635261となり「1.63526」とは一致しません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問