以下のように、「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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア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
総合スコア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
総合スコア21956
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
総合スコア33699
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
総合スコア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
総合スコア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
総合スコア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
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。