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

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

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

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

Q&A

解決済

1回答

4041閲覧

癖のあるCSV[DATE, TIME, X]のDataFrameへの取込み | 3列(DATE, TIME, X) --> 2列(DATETIME, X)への変換

Higomon

総合スコア33

Python 3.x

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

0グッド

1クリップ

投稿2018/10/17 07:08

前提・実現したいこと

  • 最終目標
    Python, Pandasで時系列解析

  • 実現したいこと
    CSVファイルからDataFrameへ取り込んだ"DATE"列, "TIME"列を1つに統合して

 "YYYY-mm-dd HH:mm:ss"とするindex列としたいです。

  • 課  題
    "DATE"列のパースのやり方はGoogleで調べて分かりました。

  "TIME"列を"HH:mm:ss"とし、最終的に"YYYY-mm-dd HH:mm:ss"とする
スマートなやり方がわからないです。

質問者背景
・Python初学者 (専門 化学)
・開発経験 Excel VBAのみ

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

解析したいCSVデータ構造、問題のある現状のDataFrame、および
理想とするDataFrameは補足情報にあるとおりです。

Pandas DataFrameへの取り込んだ"日付"列, "時間"列を1つに統合して
"YYYY-mm-dd HH:mm:ss"と表記したいです。

該当のソースコード

Python3

1import pandas as pd 2#parser 3dateparse = lambda d: pd.datetime.strptime(d, '%Y%m%d') 4 5df = pd.read_csv(’data.csv’, index_col='DATE', date_parser = dateparse) 6 7#ここから先、"日付"列, "時間"列を1つに統合して 8#"YYYY-mm-dd HH:mm:ss"と表記したい

試したこと

最終的に、pd.to_datetime型にしたいので
DATE列から日付文字列を抽出し、次に、時間を...と考えました。
しかし、このやり方ではスマートではないので、
スマートなやり方がございましたら、教えて頂きたいです。

Python3

1def left(text, n): 2 return text[:n] 3 4#DATE(文字列として抽出) 5dates = left(str(df.index[0]),10) 6 7#....

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

CSV file(計3列)


DATETIMEX
201410010000015
201410010000025
201410010000035
...|...|...

20141001|005957|5
20141001|005958|5
20141001|005959|5
20141001|010000|5

(現状) DataFrame(計3列)


課題 TIME列の読込がおかしい

DATETIMEX
2014-10-0115
2014-10-0125
2014-10-0135
...|...|...

2014-10-01|5957|5
2014-10-01|5958|5
2014-10-01|5959|5
2014-10-01|10000|5

(理想) DataFrame[DATETIME, Value(計2列)]


DATE列とTIME列を結合し、index列としたい

DATETIMEX
2014-10-01 00:00:015
2014-10-01 00:00:025
2014-10-01 00:00:035
...|...

2014-10-01 00:59:57|5
2014-10-01 00:59:58|5
2014-10-01 00:59:59|5
2014-10-01 01:00:00|5

環境

  • Windows 7
  • Anaconda custom (64-bit)| (default, Jun 28 2018, 11:27:44) [MSC v.1900 64 bit (AMD64)]
  • Python: 3.6.6, Pandas: 0.23.4
  • Jupyter Notebook

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

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

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

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

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

guest

回答1

0

ベストアンサー

このフォーマット形式であれば、特にdate_parser を設定することなく時系列データを解析できると思います。

また、現状CSVファイルは 'DATE'列と'TIME'列が分かれているようですので parese_dates{'DATETIME': ['DATE','TIME']} のように 'DATE'列と'TIME'列をリストでまとめて設定することで1つのDATETIME型として解析することができます。

以下、サンプルです。

Python

1import pandas as pd 2import io 3 4data = """ 5DATE,TIME,X 620141001,000001,5 720141001,000002,5 820141001,000003,5 920141001,000004,5 1020141001,000005,5 1120141001,000006,5 1220141001,100000,5 13""" 14 15#df = pd.read_csv(’data.csv’, index_col='DATE', date_parser = dateparse) 16 17df = pd.read_csv(io.StringIO(data), parse_dates={'DATETIME':['DATE', 'TIME']}, index_col='DATETIME') 18print(df) 19# X 20#DATETIME 21#2014-10-01 00:00:01 5 22#2014-10-01 00:00:02 5 23#2014-10-01 00:00:03 5 24#2014-10-01 00:00:04 5 25#2014-10-01 00:00:05 5 26#2014-10-01 00:00:06 5 27#2014-10-01 10:00:00 5

投稿2018/10/17 07:28

magichan

総合スコア15898

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

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

Higomon

2018/10/17 07:41

質問投稿から30分も満たない時間でご回答頂き、誠にありがとうございます。 試したところ、うまくいきました。 こんなやり方があるとは目から鱗でした。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問