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

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

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

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

Python 3.x

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

987閲覧

python 数値穴埋め?変換?がしたい

techno

総合スコア22

CSV

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

Python 3.x

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/07/17 06:07

前提・実現したいこと

下記の内容のコンマで区切られたcsvデータがあるのですが
6つの数字(横)でひとくくり
それが10個あるデータ
(数字のデータはソートしてあり数の小さいのから大きいものにならべかえしてあります)

data.csv

2,5,8,9,10,15
1,5,7,9,11,15
1,4,8,10,11,12
5,6,7,13,15,16
8,10,11,13,14
4,5,6,15,17,18
2,4,6,8,10,15
3,6,9,12,15,18
3,5,7,8,11,17
7,9,10,11,12,16

これを読み取りなんやかんやして
下記のエクセル画像のように
それぞれの所に当てはめ更に画像の下の様にcsvにする事は可能でしょうか?
(下記のCSVにするのはエクセルで読み込むため)

*黄色の部分は要りません

イメージ説明

data2.csv
,1,,,1,,,1,1,1,,,,,1,,,
1,,,,1,,1,,1,,1,,,,1,,,
1,,,1,,,,1,,1,1,1,,,,,,
,,,,1,1,1,,,,,,1,,1,1,,
,,,,,,,1,,1,1,,1,1,,,,
,,,1,1,1,,,,,,,,,1,,1,1
,1,,1,,1,,1,,1,,,,,1,,,
,,1,,,1,,,1,,,1,,,1,,,1
,,1,,1,,1,1,,,1,,,,,,1,
,,,,,,1,,1,1,1,1,,,,1,,

↑ 
エクセルで開いた時に画像のようになるよう

data.csvをdata2.csv にしたい

可能であるのならその考え方
可能でないのであればその実現方法をご教示いただけますと幸いです。
よろしくお願いします。

試したこと

python のpandas

pandasで欠損値NaNを除外(削除)・置換(穴埋め)・抽出
リンク内容

pandas.DataFrame, Seriesの要素の値を置換するreplace
リンク内容

がヒント…思考的にとっかかりがあると思ったのですが決定打には至りませんでした

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

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

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

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

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

guest

回答2

0

素直に実装すると以下のような感じで書けます。

Python

1import pandas as pd 2from io import StringIO 3import numpy as np 4 5# ダミーデータ 6s = """2,5,8,9,10,15 71,5,7,9,11,15 81,4,8,10,11,12 95,6,7,13,15,16 108,10,11,13,14 114,5,6,15,17,18 122,4,6,8,10,15 133,6,9,12,15,18 143,5,7,8,11,17 157,9,10,11,12,16""" 16df = pd.read_csv(StringIO(s), header=None) 17df = df.fillna(0) 18 19ary = df.values.astype(int) 20row_size = np.max(ary) # 行の長さ 21 22bit_rows = [] 23for row in ary: 24 # 指定の列位置に「1」をセット 25 bit_row = [0 for _ in range(row_size)] 26 for c in row: 27 if c > 0: 28 bit_row[c-1] = 1 29 bit_rows.append(bit_row) 30 31df = pd.DataFrame(bit_rows, columns=[f'{i+1}' for i in range(row_size)]) 32print(df) 33""" 34 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 350 0 1 0 0 1 0 0 1 1 1 0 0 0 0 1 0 0 0 361 1 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 372 1 0 0 1 0 0 0 1 0 1 1 1 0 0 0 0 0 0 383 0 0 0 0 1 1 1 0 0 0 0 0 1 0 1 1 0 0 394 0 0 0 0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 405 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 1 1 416 0 1 0 1 0 1 0 1 0 1 0 0 0 0 1 0 0 0 427 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 438 0 0 1 0 1 0 1 1 0 0 1 0 0 0 0 0 1 0 449 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 1 0 0 45"""

投稿2020/07/17 06:28

can110

総合スコア38341

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

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

techno

2020/07/28 01:27

お答えいただきありがとうございます。 kirara0048さんにもお聞きしたのですが こう言った考えはどういう風に考えていったらいいのでしょうか? まず何をしたいかを考えそこからどういう風に実装したらいいか、その実装の仕方が思いつかないのです(記述の仕方、考え方、実装の仕方)
guest

0

ベストアンサー

python

1import numpy as np 2import pandas as pd 3 4df = pd.read_csv('data.csv', header=None).fillna(0).astype(int) 5arr = df.to_numpy() 6arr 7# array([[ 2, 5, 8, 9, 10, 15], 8# [ 1, 5, 7, 9, 11, 15], 9# [ 1, 4, 8, 10, 11, 12], 10# [ 5, 6, 7, 13, 15, 16], 11# [ 8, 10, 11, 13, 14, 0], 12# [ 4, 5, 6, 15, 17, 18], 13# [ 2, 4, 6, 8, 10, 15], 14# [ 3, 6, 9, 12, 15, 18], 15# [ 3, 5, 7, 8, 11, 17], 16# [ 7, 9, 10, 11, 12, 16]])

このとき、

python

1# 方法1 2out = np.full((len(arr), arr.max()+1), '', dtype='U1') 3np.put_along_axis(out, arr, '1', 1) 4pd.DataFrame(out[:, 1:]).to_csv('data2.csv', header=None, index=None) 5 6# 方法2 7out = np.where((arr==np.arange(arr.max()+1)[:, None, None]).any(2).T, '1', '') 8pd.DataFrame(out[:, 1:]).to_csv('data2.csv', header=None, index=None)
,1,,,1,,,1,1,1,,,,,1,,, 1,,,,1,,1,,1,,1,,,,1,,, 1,,,1,,,,1,,1,1,1,,,,,, ,,,,1,1,1,,,,,,1,,1,1,, ,,,,,,,1,,1,1,,1,1,,,, ,,,1,1,1,,,,,,,,,1,,1,1 ,1,,1,,1,,1,,1,,,,,1,,, ,,1,,,1,,,1,,,1,,,1,,,1 ,,1,,1,,1,1,,,1,,,,,,1, ,,,,,,1,,1,1,1,1,,,,1,,

投稿2020/07/17 07:42

編集2020/07/17 07:59
kirara0048

総合スコア1399

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

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

techno

2020/07/28 01:26

お返事遅れて大変申し訳ございません ありがとうございました 不躾ながらお聞きしたいのですがこう言った考えはどういう風に考えていったらいいのでしょうか? まず何をしたいかを考えそこからどういう風に実装したらいいか、その実装の仕方が思いつかないのです(記述の仕方、考え方、実装の仕方)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問