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

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

ただいまの
回答率

88.80%

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

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,935

Higomon

score 31

 前提・実現したいこと

  • 最終目標
    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"と表記したいです。

 該当のソースコード

import pandas as pd
#parser
dateparse = lambda d: pd.datetime.strptime(d, '%Y%m%d') 

df = pd.read_csv(’data.csv’, index_col='DATE', date_parser = dateparse)

#ここから先、"日付"列, "時間"列を1つに統合して
#"YYYY-mm-dd HH:mm:ss"と表記したい

 試したこと

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

def left(text, n):
  return text[:n]

#DATE(文字列として抽出)
dates = left(str(df.index[0]),10)

#....

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

# CSV file(計3列)

DATE TIME X
20141001 000001 5
20141001 000002 5
20141001 000003 5
... ... ...
20141001 005957 5
20141001 005958 5
20141001 005959 5
20141001 010000 5

# (現状) DataFrame(計3列)

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

DATE TIME X
2014-10-01 1 5
2014-10-01 2 5
2014-10-01 3 5
... ... ...
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列としたい

DATETIME X
2014-10-01 00:00:01 5
2014-10-01 00:00:02 5
2014-10-01 00:00:03 5
... ...
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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

以下、サンプルです。

import pandas as pd
import io

data = """
DATE,TIME,X
20141001,000001,5
20141001,000002,5
20141001,000003,5
20141001,000004,5
20141001,000005,5
20141001,000006,5
20141001,100000,5
"""

#df = pd.read_csv(’data.csv’, index_col='DATE', date_parser = dateparse)

df = pd.read_csv(io.StringIO(data), parse_dates={'DATETIME':['DATE', 'TIME']}, index_col='DATETIME')
print(df)
#                     X
#DATETIME
#2014-10-01 00:00:01  5
#2014-10-01 00:00:02  5
#2014-10-01 00:00:03  5
#2014-10-01 00:00:04  5
#2014-10-01 00:00:05  5
#2014-10-01 00:00:06  5
#2014-10-01 10:00:00  5

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/17 16:41

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

    キャンセル

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

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る