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

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

詳細はこちら
Python

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

Q&A

解決済

1回答

11309閲覧

python csv 列のソートについて

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2019/10/16 08:06

編集2019/10/16 09:10

pythonでcsvを読み込み、列のソートをしたいのですが、上手くいきません。
具体的には、値の小さい順に並べたく以下のようにコードを記述いたしましたが、
上手く動きませんでした。

コードは以下の通りになります。
import csv
import operator

#ファイルの読み込み
file = csv.reader(open('default.csv'),delimiter=',')

#2列目をソート
result = sorted(file,key=operator.itemgetter(1))
print(result)

csvファイルの内容
[出発_中間点,コスト][1_1,10][1_2,1][1_3,5]
これを並び替えた時に[1_2,1][1_3,5][1_1,10]としたいのですが、
[1_2,1][1_1,10][1_3,5]となってしまいます。

基本的なことをお聞きし、申し訳ありませんが、ご教授いただけましたら幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

2列目のデータ項目「コスト」部分が文字列で扱われ、辞書順でソートされている為ですね。
以下のようなコードではいかがでしょうか。2列目を整数に直してからソートするようにします。
また、CSVファイルの1行目はヘッダー行であることを前提とします。

Python3

1# coding:utf-8 2import csv 3import operator 4 5# ファイルの読み込み 6file = csv.reader(open('default.csv'), delimiter=',') 7 8# 1行目にヘッダーが存在する場合、nextで読み飛ばす 9header = next(file) 10 11rows = [[row[0], int(row[1])] for row in file] 12 13# 2列目でソート 14result = sorted(rows, key=operator.itemgetter(1)) 15print(result)

上記ファイルをt1.py とした、実行結果です。

bash

1$ cat default.csv 2出発_中間点,コスト 31_1,10 41_2,1 51_3,5 61_3,2 71_3,102 81_3,100 9 10$ python3 t1.py 11[['1_2', 1], ['1_3', 2], ['1_3', 5], ['1_1', 10], ['1_3', 100], ['1_3', 102]]

投稿2019/10/17 06:30

編集2019/10/17 08:20
dodox86

総合スコア9254

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

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

退会済みユーザー

退会済みユーザー

2019/10/17 07:52

ご連絡ありがとうございます。 早速試させていただいてのですが、 invalid literal for int() with base 10: 'コスト' といったメッセージが表示されてしまいます。 調べたところint()の引数に使用できない値が使用されているとのことでしたが、 どう修正したらよろしいのでしょうか。 pythonを学習し始めたばかりで、基礎的な内容となり、大変申し訳ございませんがよろしくお願いいたします。
dodox86

2019/10/17 08:03

default.csvは1行目に「出発_中間点,コスト」とある、ヘッダー込みのものでしょうか。
退会済みユーザー

退会済みユーザー

2019/10/17 08:14

ご連絡ありがとうございます。 おっしゃる通り、default.csvの1行目は「出発_中間点、コスト」となっております。
dodox86

2019/10/17 08:22

回答を「CSVファイルの1行目がヘッダー行であること」前提で修正しました。ご確認ください。 また、ご質問中で"出発_中間点,コスト"とカンマが全角文字になっていたので、ちゃんと利用する場合は修正しておいた方が良いと思います。
退会済みユーザー

退会済みユーザー

2019/10/17 08:24

ありがとうございます。 新たに教えていただいた内容で解決できました。 お忙しいところご丁寧に教えていただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問