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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

11回答

966閲覧

カラム名で置き換える

moriaki

総合スコア8

Python 3.x

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

0グッド

0クリップ

投稿2019/01/17 06:08

以下のように、「csvのvalueを属するカラム名で置き換えたい」のですが、良い解決策はありますか?

  • python
  • excel
  • numbers

など、どんな方法でも構いませんので、詳しい方いらっしゃいましたらご教授お願いします。

a,b,c,A,B,C 1,0,0,0,1,1 0,1,0,1,0,0 0,0,1,0,0,1

a,b,c,A,B,C a,0,0,0,B,C 0,b,0,A,0,0 0,0,c,0,0,C

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

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

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

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

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

guest

回答11

0

perlなら1行でOK。

perl

1 perl -F, -alne '($.==1)?(@c=@_=split(",",$_)) : (@_=map{$F[$_]==1?$c[$_]:0}(0..$#F)); print join(",",@_)' 2 input.csv > output.csv

投稿2019/01/17 06:49

編集2019/01/17 06:51
KojiDoi

総合スコア13671

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

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

0

Excel でcsvファイルを呼び出して、作業用のブックのsheet1のA1セルから値貼付をして、そのブックのsheet2に以下のような式を当てはめます。

1行目   Sheet1の1行目をそのまま反映する。 例. A1セル内の式 =sheet1!A1

2行目以降 sheet1の対応した値に応じて1行目を反映するか、0を出すかのif関数を当てはめる。
例. A2セル内の式 =if(sheet1!b1 > 0 , A$1, 0)

浮かび上がったsheet2をcsvファイルとして名前を指定して保存する。

私が即席で編集するのなら以上のような手順を用いるでしょう。

投稿2019/01/17 06:42

seastar3

総合スコア2285

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

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

0

ベストアンサー

Python の場合、pandas を使うと簡単にできます。

python

1import pandas as pd 2 3# ファイルから読み込む。 4df = pd.read_csv('data.csv') 5 6for name in df: 7 df[name].replace(1, name, inplace=True) # 1 を列名で置換する。 8 9# ファイルに保存する。 10df.to_csv('data_modified.csv', index=False)
a,b,c,A,B,C 1,0,0,0,1,1 0,1,0,1,0,0 0,0,1,0,0,1

a,b,c,A,B,C a,0,0,0,B,C 0,b,0,A,0,0 0,0,c,0,0,C

投稿2019/01/17 06:38

tiitoi

総合スコア21956

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

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

0

もう終わってますが、Excelで簡単に置換する方法考えました。

Excelで開いて、メニューから置換(もしくはCTRL+H)
検索する文字列に1
置換後の文字列に=INDIRECT(ADDRESS(1,COLUMN()))
全て置換、で終了です。

投稿2019/01/18 01:42

ttyp03

総合スコア16998

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

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

0

エクセル VBA でやるなら、

vba

1Sub Macro1() 2 Dim wb As Workbook 3 Set wb = Workbooks.Open(Filename:="C:\TEST\test.csv") 4 Dim ws As Worksheet, r As Range 5 Set ws = wb.Worksheets(1) 6 For Each r In ws.Cells(1,1).CurrentRegion 7 If r.Value = 1 Then r.Value = ws.Cells(1, r.Column).Value 8 Next 9 wb.Close SaveChanges:=True 10End Sub

投稿2019/01/17 11:06

hatena19

総合スコア33699

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

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

0

カラム数がそれほど多くないのであれば、Excelで開いて、
A列を選択、1→aに置換、
B列を選択、1→bに置換、
・・・
とやるとか。
プログラムとか組むより手っ取り早いです。
カラム数が沢山あると気が遠くなるので他の方法で。

投稿2019/01/17 07:45

ttyp03

総合スコア16998

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

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

0

pandasを使うと以下のように書けます。

Python

1import pandas as pd 2df = pd.read_excel('inp.xlsx') 3for col in df.columns: 4 df[col] = df[col].apply( lambda c: col if c == 1 else 0) 5 6df.to_excel('out.xlsx',index=False) 7""" 8a,b,c,A,B,C 9a,0,0,0,B,C 100,b,0,A,0,0 110,0,c,0,0,C 12"""

投稿2019/01/17 06:42

can110

総合スコア38258

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

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

0

pandas を使うと以下のように書けます。

Python

1import pandas as pd 2#CSVファイルの読み込み 3df = pd.read_csv('data.csv') 4print(df) 5# a b c A B C 6#0 1 0 0 0 1 1 7#1 0 1 0 1 0 0 8#2 0 0 1 0 0 1 9 10#値が1の箇所をColumn名に置き換え 11df = df.apply(lambda data:data.mask(d==1, data.name)) 12print(df) 13# a b c A B C 14#0 a 0 0 0 B C 15#1 0 b 0 A 0 0 16#2 0 0 c 0 0 C 17 18#CSVファイルに書き出す 19df.to_csv('out.csv',index=None)

投稿2019/01/17 06:38

magichan

総合スコア15898

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

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

0

どんな方法でも構いません

google sheetで。targetのとこの1をホントの値にしてください。

javascript

1function onOpen(){ 2 const myMenu=[{name: "おきかえ", functionName: "q169315"}]; 3 SpreadsheetApp.getActiveSpreadsheet().addMenu("ここをクリック",myMenu); //メニューを追加 4} 5function q169315() { 6 const target = 1; 7 const sh = SpreadsheetApp.getActiveSheet(); 8 const full = sh.getDataRange().getValues(); 9 const header = full.shift(); 10 const values = full.map(function(e) { return e.map(function(el,i) { return el === target ? header[i] : el});}); 11 sh.getRange(2, 1, values.length, header.length).setValues(values); 12}

投稿2019/01/17 06:32

papinianus

総合スコア12705

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

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

0

panda を使わずに書いてみました。
in.csv

a,b,c,A,B,C 1,0,0,0,1,1 0,1,0,1,0,0 0,0,1,0,0,1

x.py

python3

1import csv 2 3in_file = 'in.csv' 4out_file = 'out.csv' 5 6f = open(out_file, 'w') 7writer = csv.writer(f, lineterminator='\n') 8 9with open(in_file, 'r') as f: 10 reader = csv.reader(f) 11 header = next(reader) 12 writer.writerow(header) 13 14 for row in reader: 15 writer.writerow(['0' if row[i] == '0' else header[i] for i in range(len(row))]) 16 17f.close()

実行例
イメージ説明

投稿2019/01/20 09:12

katoy

総合スコア22324

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

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

0

皆さんありがとうございました。大変参考になりました。
ちなみにこんな方法も見つけましたので記載しておきます。

python

1import pandas as pd 2 3df = pd.read_csv('data.csv') 4df.replace(1, pd.Series(col.columns, col.columns)) # 1 を列名で置換する 5df.to_csv('data_modified.csv', index=False)

投稿2019/01/17 16:55

moriaki

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問