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

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

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

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

Q&A

解決済

1回答

1122閲覧

python 長さの違うcsvファイルの扱いに関して

pythoner123

総合スコア18

CSV

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

0グッド

1クリップ

投稿2020/02/18 17:12

編集2020/02/18 17:52

pythonについての質問です.
|Generation|ID|Round|||||||
|:--|:--:|:--:|
|1|0|1|[1|2|3|4]
|2|0|2|[2|3|5|6|7]

python

1Generation,Agent_ID,Round 20,0,1,[1, 2, 3, 4] 30,0,2,[2, 3, 5, 6, 7]

以上のようなcsvファイルがあります.

この時,Generation=1の時,[]内に含まれている数字がGeneration=2の時の[]内に含まれている確率を調べたいです.
csvファイルには, [1 で1セル,2で1セル,3で1セル,4]で1セルのように書き出してあります.

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

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

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

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

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

hayataka2049

2020/02/18 17:22

まずそれは一般的にcsvファイルと呼ばれるフォーマットではないので、実際のテキスト形式でどのように表されているのか<code>ボタンで挿入できるコードブロックを使って掲載するように編集してください。
hayataka2049

2020/02/18 17:35

えーっと、markdownの表にはしなくていいので、「テキスト形式のCSV」で掲載してください
hayataka2049

2020/02/18 17:46

編集に失敗しているようなので、プレビュー見ながら調整してください。基本的にコード部分の上下を```で囲う必要があります。 そのフォーマットで間違いないんですね。
pythoner123

2020/02/18 17:53

修正いたしました. 間違い無いです.
Orlofsky

2020/02/18 22:56

誤解されるだけですから、markdownの表 の部分は削除しては?
Orlofsky

2020/02/18 22:58

csvとは同じ個数のデータを , で区切ったものです。 これは csv ではないので、csvという記述も削ってください。
magichan

2020/02/18 23:35 編集

個人的には、サンプルを動作させる為にテキスト形式のcsvファイルを貼っていただいた方が大変助かるのですが、markdownのテーブル形式のデータも「あるならあった方が良い」と思うので消す必要はないのでは思います。 (CSVは人間が目視でデータ構成を確認するには不向きかと) 「CSVデータをそのまま貼っていただいたら、テーブルを無理して作成する必要がない」というのは同意です。
magichan

2020/02/18 23:33

今回の場合も(CSVに間違いがあるために)どの列にどのカラム名が対応するのかをCSVファイルもみからだと判別が不可能なのですが、テーブル表があるので一応対応を確認できるので一応役立ってます。
sage

2020/02/19 01:08

全てを作ってほしいというのはteratailでは推奨されません。 どこまでやり、何に困っているのですか。あなたが何に困っているのかを明示すると、その解決方法を教えてくれる人も現れるだろうし、困っていたことと解決方法が記録に残れば後で同様に困った人が助かります。そのための場がteratailだと思います。
guest

回答1

0

ベストアンサー

まずCSVデータですが、

CSV

1Generation,Agent_ID,Round,Data 20,0,1,"[1, 2, 3, 4]" 30,0,2,"[2, 3, 5, 6, 7]"

のように

  • リスト部をQuoteで囲む
  • ヘッダ行にてリスト部にもカラム名を指定 (','だけでもよい)

であれば普通にCSVとして読めるかと思います。

ということで、データをテキストで読み込んで上記を修正(置換)したあとでPandasでCSVとして読み込むという手法を取ります。
あとリスト部の解析(文字列 to List)には Json Parserを使用します

Python

1import pandas as pd 2import json 3import io 4 5with open('data.csv') as f: 6 data = f.read() 7 data = data.replace('Round', 'Round,Data') #ヘッダ行修正 8 data = data.replace('[', '\"[').replace(']', ']\"') #Quote追加処理 9 df = pd.read_csv(io.StringIO(data), 10 index_col='Round', 11 converters={'Data':lambda d: json.loads(d)}) 12print(df) 13# Generation Agent_ID Data 14#Round 15#1 0 0 [1, 2, 3, 4] 16#2 0 0 [2, 3, 5, 6, 7]

あとは、Generation=1 の行とGeneration=2の行が1行ずつしか無いと仮定すると、単なるリスト同士の処理なので

Python

1p = np.mean([d in df.loc[2, 'Data'] for d in df.loc[1, 'Data']]) 2print(p) 3# 0.5

とでもすると良いのではないでしょうか。

投稿2020/02/19 00:00

magichan

総合スコア15898

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問