CSV行列入れ替え
表計算の TRANSPOSE関数を利用
…するような方法は他の人に解説を譲りまして^^
ここではなでしこさんと JavaScriptと AWKで作り置き。
//なでしこ3(公式エディタ)で↓
「1,2
3,4
5,6」のCSV取得の表行列交換。 //テキスト→二次元配列→行列入れ替え
それを表CSV変換して表示する。 //それ→テキスト→print
#それを(element object)にテキスト設定する。
#↓出力
#1,3,5
#2,4,6
//JavaScript (in HTML) で↓
//関数定義.
function csv2matrix (元CSV){
return 元CSV.split('\n').map(function(一行){
return 一行.split(',');
}); //元CSV→split→map(split)→二次元配列
};
function change_matrix (元表){
//新表行数 = 繰り返し数 = 元表列数なので元表一行をmap.
return 元表[0].map(function(line,元列番){ //新行indexは元表列番に相当
return 元表.map(function(元行){
return 元行[元列番];
}); //元表から一行一要素 = 縦一列を横一行に = 一次元リスト
}); //元表[0]の要素数 = 元列数 = 新行数の二次元配列
};
function matrix2csv (新表){
return 新表.map(function(一次元リスト){
return 一次元リスト.join(',');
}).join('\n'); //二次元配列→map(join)→join→新CSV
};
//メイン.
var 元CSV=`1,2
3,4
5,6`;
var 配列=csv2matrix(元CSV);
配列=change_matrix(配列);
var 新CSV=matrix2csv(配列);
console.log(新CSV);
/*
(textareaオブジェクト).value=新CSV;
(divオブジェクト).innerText=新CSV;
↓出力
1,3,5
2,4,6
*/
//AWK (on shell) で↓
echo '1,2
3,4
5,6' | awk '
BEGIN{
FS = ","
OFS = ","
}
#MAIN.
NR==1{num_of_old_cols = NF}
{
#$1から$NFまで横に読んで.
#For old_col = 1 To NF
for (old_col=1; old_col<=NF; old_col++){
table[old_col, NR] = $old_col #縦に並べる
} #一列広がる
} #二次元配列完成
END{
#一行ずつ.
#For row = 1 To num_of_old_cols
for (row=1; row<=num_of_old_cols; row++){
line = ""
#列を追加していく.
#For col = 1 To NR
for (col=1; col<=NR; col++){
line = line OFS table[row, col]
} #一行完成
line = substr(line, 2) #行頭のカンマを削除
print line
} #行列完成
}
' #>outfile.txt
#↓出力
#1,3,5
#2,4,6
う~ん、なでしこさんがとってもスレンダーw
あと、後ろ二つはカンマのクオート(,"hoge,fuga",等)考慮してないけど、なでしこさんは善きに計らってくれるよ。
//日本語プログラミング言語なでしこさん公式↓
(おしまい)
(2022-05-23: 追記)
Pandas DataFrameでの例もここにまとめとく。
Google Colabで↓
import pandas
元df = pandas.read_csv(
'/content/drive/MyDrive/sample.csv',
header = None)
#print(元df.T)
元df.T.to_csv(
'/content/drive/MyDrive/outfile.csv')
_以上_