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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

解決済

1回答

2973閲覧

CSVデータの並び替えについて

oilman

総合スコア14

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クリップ

投稿2019/04/05 12:19

前提・実現したいこと

pythonを勉強中の者です。

あるCSVデータから、整理して、
2018/10/17 13:29,logon
2018/10/19 17:51,logoff
2018/10/19 18:04,logon
2018/10/19 18:11,logoff
2018/10/24 10:18,logon
2018/10/24 11:50,logoff

以下の結果に並び替えしたいのですが、どのようにすればよいか教えていただけないでしょうか?
Pandasライブラリを利用するなどでも大丈夫です。

logon, logoff
2018/10/17 13:29,2018/10/19 17:51
2018/10/19 18:04,2018/10/19 18:11
2018/10/24 10:18,2018/10/24 11:50

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

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

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

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

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

guest

回答1

0

ベストアンサー

pandas であれば DataFrame.melt()で実現できるかと思います

https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.DataFrame.melt.html

Python

1import pandas as pd 2import io 3 4data = """ 5logon,logoff 62018/10/17 13:29,2018/10/19 17:51 72018/10/19 18:04,2018/10/19 18:11 82018/10/24 10:18,2018/10/24 11:50 9""" 10 11df = pd.read_csv(io.StringIO(data), parse_dates=['logon','logoff']) 12# logon logoff 13#0 2018-10-17 13:29:00 2018-10-19 17:51:00 14#1 2018-10-19 18:04:00 2018-10-19 18:11:00 15#2 2018-10-24 10:18:00 2018-10-24 11:50:00 16 17result = df.melt(value_vars=['logon','logoff']) 18print(result) 19# variable value 20#0 logon 2018-10-17 13:29:00 21#1 logon 2018-10-19 18:04:00 22#2 logon 2018-10-24 10:18:00 23#3 logoff 2018-10-19 17:51:00 24#4 logoff 2018-10-19 18:11:00 25#5 logoff 2018-10-24 11:50:00

【追記】

反対の処理は DataFrame.pivot() または DataFrame.pivot_table() にて行うことができます。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot.html
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot_table.html

Python

1import pandas as pd 2import io 3 4data = """ 52018/10/17 13:29,logon 62018/10/19 17:51,logoff 72018/10/19 18:04,logon 82018/10/19 18:11,logoff 92018/10/24 10:18,logon 102018/10/24 11:50,logoff 11""" 12 13df = pd.read_csv(io.StringIO(data), header=None, parse_dates=[0]) 14# 0 1 15#0 2018-10-17 13:29:00 logon 16#1 2018-10-19 17:51:00 logoff 17#2 2018-10-19 18:04:00 logon 18#3 2018-10-19 18:11:00 logoff 19#4 2018-10-24 10:18:00 logon 20#5 2018-10-24 11:50:00 logoff 21 22result = df.pivot(columns=1, index=df.index//2) 23# 0 24#1 logoff logon 25#0 2018-10-19 17:51:00 2018-10-17 13:29:00 26#1 2018-10-19 18:11:00 2018-10-19 18:04:00 27#2 2018-10-24 11:50:00 2018-10-24 10:18:00 28 29result = df.pivot_table(values=0, columns=1, aggfunc='first', index=df.index//2) 30#1 logoff logon 31#0 2018-10-19 17:51:00 2018-10-17 13:29:00 32#1 2018-10-19 18:11:00 2018-10-19 18:04:00 33#2 2018-10-24 11:50:00 2018-10-24 10:18:00

投稿2019/04/05 13:34

編集2019/04/06 15:53
magichan

総合スコア15898

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

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

oilman

2019/04/06 14:01

早速のご回答ありがとうございます。 元データ data = """ 2018/10/17 13:29,logon 2018/10/19 17:51,logoff 2018/10/19 18:04,logon 2018/10/19 18:11,logoff 2018/10/24 10:18,logon 2018/10/24 11:50,logoff """ を # logon logoff #0 2018-10-17 13:29:00 2018-10-19 17:51:00 #1 2018-10-19 18:04:00 2018-10-19 18:11:00 #2 2018-10-24 10:18:00 2018-10-24 11:50:00 にしたいのですが、これもDataFrame.melt()で実現できるのでしょうか?
magichan

2019/04/06 15:45

うおぉ!! 大変失礼致しました。 全く反対の処理を行いたかったのですね。 それであれば、DataFrame.pivot() または DataFrame.pivot_table() にて実現できます。 追記します。
oilman

2019/04/07 02:41

出来ました!ありがとうございます。 またCSVファイルを読み込ませる場合、 df = pd.read_csv('sample.csv', encoding='utf-8', header=None, parse_dates=[0]) で行けますね これから、少しずつ学んでいきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問