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

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

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

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

Q&A

解決済

2回答

2885閲覧

CSVのデータをネストされた辞書型へ変換する

taka0606

総合スコア9

CSV

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

0グッド

0クリップ

投稿2020/06/30 02:55

以下のようなCSVデータをPythonのネストされた辞書型へ変換したいと思っています。
Python初心者でどのようなコードを書いたら良いかわからず質問させていただきました。
やりたいこととしてはCSVデータのClassをキーとしてグループ化し、色々な条件でデータの抽出を
行いたいと思っています。

【もとのCSVデータ】

ClassNo.EnglishMathScienceSociety
A163756882
A274728386
B259657181
B163567481
C366726173
C172675869
C274786166
D288919280
D160796877
D379838590

【欲しいアウトプット】

Python

1data ={ {'A': {'No.':[1,2], 'English':[63,74], 'Math':[75,72], 'Science':[68,83], 'Society':[82,86]}}, 2 {'B': {'NO.':[2,1], 'English':[59,63], 'Math':[65,56], 'Science':[71,74], 'Society':[81,81]}}, 3 {'C': {'No.':[3,1,2], 'English':[66,72,74], 'Math':[72,67,78], 'Science':[61,58,61], 'Society':[73,69,66]}}, 4 {'D': {'No.':[2,1,3], 'English':[88,60,79], 'Math':[91,79,83], 'Science':[92,68,85], 'Society':[80,77,90]}} } 5

自分なりに調べたところ、itertools.groupbyやdict.setdefaultなど使えばできるようなことが書いてありましたがよく分かりませんでした。
どなたかわかる方いらっしゃれば教えていただけると幸いです。

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

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

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

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

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

guest

回答2

0

愚直にやる方法しか思いつきませんでしたが、
input.csvというファイルを作成したうえで、こんな感じでしょうか。

python

1import pandas as pd 2 3df = pd.read_csv("input.csv") 4 5result = {} 6for c in df["Class"].unique(): 7 df_part = df[df["Class"]==c] 8 result[c] = {} 9 for col in df_part.columns: 10 if col == "Class": 11 continue 12 result[c][col] = [*df_part[col].values] 13 14print(result)

投稿2020/06/30 04:23

snkmr0221

総合スコア11

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

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

taka0606

2020/06/30 04:59

回答ありがとうございます。やはり力技でやっていくしかないのですね。大変参考になりました。
guest

0

ベストアンサー

CSVデータのClassをキーとしてグループ化し、色々な条件でデータの抽出

がご要望であれば必ずしも辞書型でなくてもよくDataFrameで
https://qiita.com/T_Shinomiya/items/c039451869382e0790f4
でよろしいのではないでしょうか。

投稿2020/06/30 03:53

aokikenichi

総合スコア2240

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

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

taka0606

2020/06/30 04:59

回答ありがとうございます。dplyr、こんな便利なものが存在するのを知らなかったので大変助かりました。データフレームで処理したいと思っていたものの、辞書型に変換して処理するとよいと助言を受けて色々試しました。かなり苦戦していたので目から鱗でした。
aokikenichi

2020/06/30 08:58

あるキーに相当する値が欲しい のような場合は辞書型が威力を発揮致しますが、例示いただいたデータ例ですと今後 Science>=80 のみを抽出 Mathの合計値、平均値を集計 合計値のカテゴリ毎に評定A/B/Cを付ける などとなるとdplyr等の取り扱いに習熟しておいた方が今後応用が利きます
taka0606

2020/06/30 18:37

辞書型にして処理すべきものの判断基準まで教えていただきありがとうございます。 あいまいな認識のまま使っていたので非常に参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問