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

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

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

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

Python 3.x

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

Q&A

1回答

869閲覧

csvファイルの参照・並べ替えがしたい

Male_soprano

総合スコア10

CSV

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

Python 3.x

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

0グッド

1クリップ

投稿2020/11/07 09:21

編集2020/11/07 12:32

前提・実現したいこと

Test2.csvのうちID列の2行目以降全てに"S_"を付与した上で,Test1.csvのID列に従いTest2.csvのID・Nubmer列を並べ直したいと考えています.お知恵をお貸し頂けますと幸いです.宜しくお願い致します.
尚,こちらは本データ(1000行以上)を簡略化したものです.

該当のソースコード

python

1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3import pandas as pd 4 5input_path1 = "Test.csv" 6input_path2 = "Test2.csv" 7output_path = "output.csv" 8df1 = pd.read_csv(filepath_or_buffer=input_path1, encoding="utf-8") 9df2 = pd.read_csv(filepath_or_buffer=input_path2, encoding="utf-8") 10df1 = df1.set_index('ID') 11df2 = df2.set_index('ID') 12 13for column_name, item in df2.iteritems(): 14 item = "S_" + item 15 df2 = df1.reindex_like(df2) 16 17with open(output_path, mode='w') as f: 18 f.write()

エラーメッセージ

Traceback (most recent call last): File "/Users/macuser/downloads/yes/lib/python3.7/site-packages/pandas/core/ops/__init__.py", line 968, in na_op result = expressions.evaluate(op, str_rep, x, y, **eval_kwargs) File "/Users/macuser/downloads/yes/lib/python3.7/site-packages/pandas/core/computation/expressions.py", line 221, in evaluate return _evaluate(op, op_str, a, b, **eval_kwargs) File "/Users/macuser/downloads/yes/lib/python3.7/site-packages/pandas/core/computation/expressions.py", line 70, in _evaluate_standard return op(a, b) File "/Users/macuser/downloads/yes/lib/python3.7/site-packages/pandas/core/ops/roperator.py", line 9, in radd return right + left numpy.core._exceptions.UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U32'), dtype('<U32')) -> dtype('<U32') During handling of the above exception, another exception occurred: Traceback (most recent call last): File "narabekae.py", line 14, in <module> item = "S_" + item File "/Users/macuser/downloads/yes/lib/python3.7/site-packages/pandas/core/ops/__init__.py", line 1048, in wrapper result = na_op(lvalues, rvalues) File "/Users/macuser/downloads/yes/lib/python3.7/site-packages/pandas/core/ops/__init__.py", line 970, in na_op result = masked_arith_op(x, y, op) File "/Users/macuser/downloads/yes/lib/python3.7/site-packages/pandas/core/ops/__init__.py", line 464, in masked_arith_op result[mask] = op(xrav[mask], y) File "/Users/macuser/downloads/yes/lib/python3.7/site-packages/pandas/core/ops/roperator.py", line 9, in radd return right + left numpy.core._exceptions.UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U32'), dtype('<U32')) -> dtype('<U32')

理想の状態 (output.csv)

output.csv

1ID,Number 2S_AA,2.13 3S_BB,2.21 4S_CC,2.09 5S_DD,2.38 6S_EE,2.52

使用ファイル1 (Test1.csv)

Test1.csv

1ID,Number 2S_AA,2.1 3S_BB,2.2 4S_CC,2.3 5S_DD,2.4 6S_EE,2.5

使用ファイル2 (Test2.csv)

Test2.csv

1ID,Number 2CC,2.09 3EE,2.52 4AA,2.13 5DD,2.38 6BB,2.21

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

macOS10.15.4 Python3.7.3 Atom

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

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

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

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

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

guest

回答1

0

  • 「S_」の付与は、applyでできます。
  • 並べ直しと言っている処理はmergeで実現できると思います。

python

1import pandas as pd 2 3input_path1 = "test.csv" 4input_path2 = "test2.csv" 5output_path = "output.csv" 6df1 = pd.read_csv(filepath_or_buffer=input_path1, encoding="utf-8") 7df2 = pd.read_csv(filepath_or_buffer=input_path2, encoding="utf-8") 8 9# df2のIDの列に「S_」を付与 10df2['ID'] = df2['ID'].apply(lambda x: f'S_{x}') 11 12# df1 と df2 を IDをキーにしてマージ 13df_res = pd.merge(df1, df2, left_on='ID', right_on='ID') 14 15df_res

結果はこんな感じになります。

text

1 ID Number_x Number_y 20 S_AA 2.1 2.13 31 S_BB 2.2 2.21 42 S_CC 2.3 2.09 53 S_DD 2.4 2.38 64 S_EE 2.5 2.52

merge()の引数を調整したり、不要なカラムを削除すれば望みの物が手にはいると思います。

投稿2020/11/07 15:08

TakaiY

総合スコア13790

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

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

Male_soprano

2020/11/09 04:04

有難うございます.お返事が遅くなり失礼しました. ところで,並べ替えた内容をoutput_pathに反映させるのはどのようにすれば宜しいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問