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

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

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

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Python

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

pandas

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

Q&A

解決済

1回答

2511閲覧

数字の羅列になっている日付データをdatetime型にしたい

taihei_._

総合スコア15

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Python

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

pandas

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

0グッド

0クリップ

投稿2021/09/04 09:20

編集2021/09/04 13:14

前提・実現したいこと

txtファイルを読み込み、dfを作成しようとしています。
オリジナルの日付データが"2019 1 1 0 0"や"201912312330"というようになっているため、datetime変換でエラーが出てしまいます。このデータを2019/01/01 0:00や2019/12/31 23:30というように変換したいです。

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

ParserError: Unknown string format: 2019 1 1 0 0

該当のソースコード

import

1df=pd.read_csv('秋田 2019.txt', encoding="shift-jis",names=['A'], skiprows=1,) 2 3df2=df['A'].str.split(' ', expand=True) 4df2 5 6df3=df2.drop(columns=df2.columns[[1,2,3,4,5,7,8,9,10,12,13]]) 7df3.columns=["Time (GMT+9)", "有義波高 (H1/3) (m)", "最高波周期 (Tp) (s)"] 8df3['Time (GMT+9)']=pd.to_datetime(df3['Time (GMT+9)'],)

試したこと

formatを以下のように指定しましたが、エラーメッセージが出ました。

df3['Time (GMT+9)']=pd.to_datetime(df3['Time (GMT+9)'],format='%Y%m%d')

ValueError: time data '2019 1 1 0 0' does not match format '%Y%m%d' (match)

また、以下のようにして空白をのぞこうとしましたが、
df3['Time (GMT+9)']=df3['Time (GMT+9)'].str.replace(' ',")

SyntaxError: EOL while scanning string literal

このようなエラーが出ました。

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

python3
jupyter notebook

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

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

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

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

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

can110

2021/09/04 09:30

「2019 1 1 0 0」はどのような日時に変換したいのでしょうか?(2019年11月0日?)
taihei_._

2021/09/04 09:42

説明不足で申し訳ございません。 2019/01/01 0:00といったように変換したいです。
guest

回答1

0

ベストアンサー

以下でいかがでしょうか。
レスがあったので再度行ってみましたが、こちらではうまくいってます。
固定長とのことですの再度修正しました。

python

1In [1]: import pandas as pd 2 3In [2]: df3 = pd.DataFrame({'A': ['2019 1 1 0 0', '2019 2 2 1 2', '201912312359'], 4 ...: 'B': [12, 22, 32], 5 ...: 'C': [13, 23, 33]}) 6 7In [3]: df3.columns=["Time (GMT+9)", "有義波高 (H1/3) (m)", "最高波周期 (Tp) (s)"] 8 9In [4]: df3 10Out[4]: 11 Time (GMT+9) 有義波高 (H1/3) (m) 最高波周期 (Tp) (s) 120 2019 1 1 0 0 12 13 131 2019 2 2 1 2 22 23 142 201912312359 32 33 15 16In [5]: df3.dtypes 17Out[5]: 18Time (GMT+9) object 19有義波高 (H1/3) (m) int64 20最高波周期 (Tp) (s) int64 21dtype: object 22 23In [6]: df3["Time (GMT+9)"] = df3["Time (GMT+9)"].str.replace(' ', '0') 24 25In [7]: df3 26Out[7]: 27 Time (GMT+9) 有義波高 (H1/3) (m) 最高波周期 (Tp) (s) 280 201901010000 12 13 291 201902020102 22 23 302 201912312359 32 33 31 32In [8]: df3['Time (GMT+9)'] = pd.to_datetime(df3['Time (GMT+9)'], format="%Y%m%d%H%M") 33 34In [9]: df3 35Out[9]: 36 Time (GMT+9) 有義波高 (H1/3) (m) 最高波周期 (Tp) (s) 370 2019-01-01 00:00:00 12 13 381 2019-02-02 01:02:00 22 23 392 2019-12-31 23:59:00 32 33 40 41In [10]: df3.dtypes 42Out[10]: 43Time (GMT+9) datetime64[ns] 44有義波高 (H1/3) (m) int64 45最高波周期 (Tp) (s) int64 46dtype: object 47 48In [11]: 49

投稿2021/09/04 09:43

編集2021/09/05 00:03
ikapy

総合スコア1167

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

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

taihei_._

2021/09/04 13:10

ご回答ありがとうございます。 試してみたところ、dtypeはobjectのままでした。。 ```df3=df2.drop(columns=df2.columns[[1,2,3,4,5,7,8,9,10,12,13]]) df3.columns=["Time (GMT+9)","有義波高 (H1/3) (m)", "最高波周期 (Tp) (s)"] x = pd.DataFrame({'Time (GMT+9)': ['2019 1 1 0 0']}) pd.to_datetime(x['Time (GMT+9)'], format="%Y %m %d %H %M")```
ikapy

2021/09/04 13:58

こちらで再度行ってみましたがうまくいってます。回答を修正しました。
taihei_._

2021/09/04 14:59

丁寧なご回答ありがとうございます。 試してみたところ、 ValueError: time data '2019 1 1 020' does not match format '%Y %m %d %H %M' (match) というエラーメッセージが出てしまいました。 おそらく原因として、二桁になる月や時間にはスペースがない(201912312340のように)ことが考えられるのではないかと思いました。
ikapy

2021/09/05 00:07

固定長の年月日時分なのですね。そうであれば半角スペースを0で埋めてから変換してください。フォーマットも"%Y%m%d%H%M"に変更します。 回答を修正しました。
taihei_._

2021/09/05 02:04

ご返信ありがとうございます。 実行したところ、うまくいきました。 プロセスまで教えていただき、大変ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問