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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CSV

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

Python

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

pandas

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

Q&A

解決済

1回答

626閲覧

pandas 転置 dat csv 列 整理

kaikatuclub_col

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CSV

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

Python

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

pandas

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

0グッド

1クリップ

投稿2020/05/26 18:37

前提・実現したいこと

jupyter notebookにて
pandasで列と行を転置して、.datとしてcsv書き込みをした際
列(転置前は行)が合わない。
こんな感じにしたいです↓
イメージ説明

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

python 3.7
pandas0.25.2
ソースコード
import pandas as pd
import numpy as np

omg = pd.DataFrame({'i': [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], 'j': [10.0, 20.0, 30.0,40.0,50.0,60.0,70.0,80.0,70.0,60.0,50.0,40.0,30.0,20.0,10.0]},
index=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])

omg2=org.iloc[1:15:2]
omg2=omg2.astype(str)
omg2.T.to_csv("output02.dat",index=False,header=False,sep=" ")

試したこと

何を試せばいいのかわかりません。

補足情報(FW/ツールのバージョンなど)

orgというdataframeを作り、その1から15行目までを2の間隔で抽出したものをout2としました。
strにしたのはintとfloatで分けられないのでstrでobjectにしてから転置しました。
できれば小数第2位を表示する方法も教えていただきたいです。

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

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

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

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

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

x98000

2020/05/26 21:46

1行目と2行目のカラム位置が合わないということでしょうか。出力されたファイルを見ていると思いますが、何で見て合わないと判断しているかわかりません。 出力内容の問題なのか、表示方法の問題なのか、補足してください。
hope_mucci

2020/05/26 22:14

pythonはインデントが命です。コードは【<code>】ボタンを使って修正してください。投稿は編集できます。 ```python コピペしたコード ```
kaikatuclub_col

2020/05/27 09:19

カラムは合っています。 表示方法として「前提・実現したいこと」の画像のように表示したいです。
x98000

2020/05/27 09:31

「何」で画像のように表示したいのでしょうか。エディタですか?コンソール出力ですか? 表示間隔は、何で表示するか、また使用するフォントなどでも変わってしまいますよ。 表示位置を意識するならCSV出力してExcelで開くなどを考えたほうがいいのでは。
kaikatuclub_col

2020/05/27 09:52

質問の内容を変更すると 列が合わないのではなく、一見すると列がずれてるように見えるので、ゴリ押しで列が揃っているように見せたいって感じです。2 4 6 8 10 12 14の間隔をもっと開けたいです。
x98000

2020/05/27 10:02

えっと… ですから、あなたが出力結果(output02.dat)を何のアプリで開いているのかが分からないんですよ。表示間隔はその表示アプリ次第ですよ。
x98000

2020/05/27 10:07

jupyterに表示したいのであれば、コードの最終行に omg2.T を入れてはどうですか?
kaikatuclub_col

2020/05/27 10:09

入れてますが? omg2.T.to_csv("output02.dat",index=False,header=False,sep=" ") ここですよね?
x98000

2020/05/27 10:12

いえいえ。その後に omg2.T だけの行を入れるんです
kaikatuclub_col

2020/05/27 10:17

あぁ、すいません。 そのエディタ内での表示ではなく 書き込んだファイル(output2.dat)での表示です。
x98000

2020/05/27 10:22

ますます分からなくなりました。今のソースコードは結果(output2.dat)を画面表示していませんよね?表示を合わせるというのはどういうことですか? また、output2.datを読み込み直して表示する意味は?
kaikatuclub_col

2020/05/27 10:28

to_csvでomg2.Tの結果をoutput2.datというファイルに書き込んでいます。 発生している問題に貼り付けている画像はそのoutput2.datのファイルをjupyternotebookのfileから開いてスクショしたものになります。わかりにくくてすいません。
x98000

2020/05/27 10:56

言われていることはわかりましたが… やるとしたら、2行目の各項目の桁数に合わせて1行目の項目間のスペースを可変で出力するというコードが必要になります。そこまでしてやる意味ありますか? jupyterで結果をきれいに見ることが目的なら、上に書いた通り omg2.T で出力した方がいいと思うんですけど。
kaikatuclub_col

2020/05/27 11:17

やる意味はないことはわかっていますが、そのように表示しろという指示ですので、、、 ちなみにやるとしたら具体的にどのようなコードになりますか?
x98000

2020/05/27 11:22

ごめんなさい。やる意味のないことに協力する時間は取れません。
hope_mucci

2020/05/27 12:47

「そのように表示しろという指示」があったのなら、「興味本位」とか「やる意味がない」と書き込む道理はなかったわけです。 本当に、カラム数とか具体的な仕様の説明もなく、「そのように表示しろ」という指示だったら、指示したほうも大概ですが。
guest

回答1

0

ベストアンサー

とりあえず小数点第2位を出す方法のみ。
format関数をj列にmapすることにより小数第2位表示の文字列に変えています。
元の表を破壊するためilocでスライスした後copyで複製したものに手を加えています。

python

1import pandas as pd 2import numpy as np 3 4omg = pd.DataFrame({'i': [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], 'j': [10.0, 20.0, 30.0,40.0,50.0,60.0,70.0,80.0,70.0,60.0,50.0,40.0,30.0,20.0,10.0]}, 5index=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]) 6 7omg2=omg.iloc[1:15:2].copy() 8omg2['j']=omg2['j'].map('{:.2f}'.format) 9omg2.T.to_csv("output02.dat",index=False,header=False,sep=" ")

で、「表示があわない」件については、1行目の数値に空白を埋める必然性がありますか?
データとして使うなら各数値の空白は1つ分で十分なはずですが。
そこのところは補足してください。データとしてあるべき姿と、データをどう使いたいのか。

投稿2020/05/26 23:25

hope_mucci

総合スコア4447

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

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

kaikatuclub_col

2020/05/27 09:21

小数点第2位はできました。ありがとうございます。 データとしては十分なのですが、表示方法として策があるのか興味程度に質問しています。
hope_mucci

2020/05/27 09:40

特に目的はないんですね。どうしても実現できなければいけないことはないと。 じゃ、回答としては「やれんことはないがスマートな方法はないしいろいろと面倒」としておきます。 そもそも質問文の最初の画像でも1行目と2行目がずれてますし。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問