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

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

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

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

Python 3.x

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

Q&A

1回答

768閲覧

Python csvファイルの読み込みについて

ChaCha_MaRu

総合スコア15

CSV

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

Python 3.x

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

0グッド

0クリップ

投稿2018/08/26 10:53

編集2022/01/12 10:55

pythonのcsvファイルの読み込みについて質問です。

|図鑑番号|ポケモン名|タイプ1|タイプ2|通常特性1|通常特性2|夢特性|HP|こうげき|ぼうぎょ|とくこう|とくぼう|すばやさ|合計|
|:--|:--:|--:|
|1|フシギダネ|くさ|どく|しんりょく||ようりょくそ|45|49|49|69|65|57|318|
|..|..|..|..|..|..|..|.|.|.|.|.|.|.|

とうようなcsvファイル(http://rikapoke.hatenablog.jp/entry/pokemon_datasheet_gne7 よりcsv形式のデータをお借りしています)を読み込むとします。

それぞれの指定した列の情報(コード内では"ポケモン名","タイプ1","タイプ2","こうげき")を取得するところまではできたのですが、そこから入力された"ポケモン名"と関連付けることができません。

理想としては2体の入力をさせて、それぞれの"ポケモンの情報"を取得し利用できるようにしたいです。

python

1# coding: utf-8 2import requests 3import re 4from bs4 import BeautifulSoup 5import math 6import csv 7import os 8import pandas as pd 9 10poke=str(input("ポケモン名:")) 11 12os.chdir("C:/Users/user/Desktop/pokemon") 13 14csv_file = open("poke.csv", "r", encoding="ms932", errors="", newline="" ) 15 16 17csv_input = pd.read_csv(filepath_or_buffer="poke.csv", encoding="ms932", sep=",") 18 19print(csv_input.size) 20poke={} 21 22poke=csv_input[["ポケモン名", "タイプ1","タイプ2","こうげき"]] 23 24print(poke) 25 26 27

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

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

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

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

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

guest

回答1

0

csv ファイルを download したら shift_jis, 改行コードは windows 形式 でした。

python3

1import csv 2 3with open('pokemon_status.csv', encoding='shift_jis') as csvfile: 4 reader = csv.reader(csvfile) 5 for row in reader: 6 print(', '.join(row))

実行例
イメージ説明

なんらかのツールをつかって csv ファイルを shift_jis から utf-8 に変換すれば, encoding 指定は不要になります。
nkf がつかえるなら、

nkf -w -Lu pokemon_status.csv > pokemon_status_utf8.csv

とすれば、utf-8, linux 改行形式に変換できます。

参考情報

  • Python3 で CSV の読み書きをする方法 – Shift_JIS と UTF-8 対応サンプルコード付

https://www.craneto.co.jp/archives/1309/#CSV-3

panda で読み込んで、検索するには次のようにします。

python3

1import csv 2import os 3import pandas as pd 4 5df = pd.read_csv('pokemon_status_utf8.csv') 6print(df.size) 7# print(df[1:2]) 8 9print() 10# print(df[df["ポケモン名"] == "リザードン"]) 11print(df[(df["ポケモン名"] == "リザードン") & (df["タイプ2"] == "ひこう")])

実行例
イメージ説明

参考情報

  • Pandas でデータフレームから特定の行・列を取得する

https://pythondatascience.plavox.info/pandas/%E8%A1%8C%E3%83%BB%E5%88%97%E3%81%AE%E6%8A%BD%E5%87%BA

追記

python3

1print(df[(df["ポケモン名"] == "リザードン") & (df["すばやさ"] == 100)])

実行結果
イメージ説明

追記2

python3

1import csv 2import pandas as pd 3 4df = pd.read_csv('pokemon_status_utf8.csv') 5 6while True: 7 name = str(input("ポケモン名 (例:リザードン) ")) 8 if name == '': 9 break 10 df1 = df[df["ポケモン名"].str.contains(name)] 11 # print(df1) 12 print(df1.loc[:, ["ポケモン名","こうげき"]]) 13 14 attack = str(input("すばやさ (例: 130) ")) 15 df2 = df1[df1["こうげき"] == int(attack)] 16 print(df2.loc[:, ["ポケモン名","こうげき"]])

実行例
イメージ説明

投稿2018/08/26 11:25

編集2018/08/27 12:38
katoy

総合スコア22324

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

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

ChaCha_MaRu

2018/08/26 14:20

回答有りがとうございます。 例えば リザードンのすばやさ"100"という値を用いたいときはどうすればよいでしょうか。行と列よりひとつの場所を取得することができません。
katoy

2018/08/26 15:45

print(df[(df["ポケモン名"] == "リザードン") & (df["すばやさ"] == 100)])
ChaCha_MaRu

2018/08/27 10:01

str(input("ポケモン")) >リザードン str(input("すばやさ")) >すばやさ と入力すると"リザードン"の"すばやさ"の値である"100"のみを入手することはできますでしょうか。初心者なもので申し訳ないです。
katoy

2018/08/27 12:21

追記2 として書き込みました。
ChaCha_MaRu

2018/08/27 13:15

辞書型に格納することは可能ですか? str(input("ポケモン名:")) >リザードン str(input("項目")) >すばやさ #dic={"入力したポケモン名":"入力したポケモンの入力した項目"} dic={"リザードン":100}  のような形でなれば理想です(”100”は列:ポケモンのリザードン、列:すばやさの100) 説明が伝わりづらく申し訳ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問