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

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

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

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

Python

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

pandas

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

Q&A

解決済

3回答

4970閲覧

pd.to_datetimeで複数のカラムを変換したい

Pablito

総合スコア71

DateTime

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

Python

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

pandas

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

0グッド

0クリップ

投稿2019/07/19 05:27

編集2019/07/19 06:47

前提・実現したいこと

ある購買データを使って分析しようとしています。
そこで、購入日などのデータをdatetime型に変換しよとしているのですが、
うまくいきません。

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

ValueError: to assemble mappings requires at least that [year, month, day] be specified: [day,month,year] is missing

該当のソースコード

Python

1pd.to_datetime(data)['date_entry', 'yymm', 'birthday']

因みにdataの中にIDや購入店など、複数のカラムが入っています。

###追記
以下も試しましたが

Python

1date = data[['date_entry', 'yymm_', 'birthday']] 2pd.to_datetime(date, format='%Y%m%d')

エラー
File "<ipython-input-62-28f18f26d02f>", line 2
pd.to_datetime(date, format='%Y%m%d') #カラムをdatetime型に変換
^
SyntaxError: invalid character in identifier

となりました(´;ω;`)

そもそもpd.to_datetimeの使い方が違うのかもしれません。
勉強不足過ぎて申し訳ありませんが、
何卒宜しくお願い致します。

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

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

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

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

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

guest

回答3

0

Python

1date = date[['date_entry', 'yymm_', 'birthday']].apply(pd.to_datetime)

で良いのではないでしょうか

一応動作サンプル

Python

1import pandas as pd 2 3date = pd.DataFrame([['20100101','20110101','20120101'], 4 ['20100102','20110102','20120102'], 5 ['20100103','20110103','20120103']], 6 columns = ['date_entry','yymm_','birthday']) 7 8date = date[['date_entry', 'yymm_', 'birthday']].apply(pd.to_datetime) 9# date_entry yymm_ birthday 10#0 2010-01-01 2011-01-01 2012-01-01 11#1 2010-01-02 2011-01-02 2012-01-02 12#2 2010-01-03 2011-01-03 2012-01-03

投稿2019/07/19 07:22

magichan

総合スコア15898

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

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

Pablito

2019/07/19 08:01

ご回答ありがとうございます。 実際に実行してみたのですが、以下のエラーが起きました。 ValueError: ('month must be in 1..12', 'occurred at index yymm_entry') yymm_の部分が 200906 のようになっているので、 これが原因なのでしょうか?
magichan

2019/07/19 08:06

フォーマットは全列で共通('%Y%m%d')かと思っていたのですが、一部違うデータがあるということでしょうか?
Pablito

2019/07/19 08:13

そうなんです。 申し遅れてすいません。
magichan

2019/07/19 08:30

とりあえず以下のように、エラー時に処理を停止しない(NaT を返す)ようにするのはどうでしょうか date = date[['date_entry', 'yymm_', 'birthday']].apply(lambda d:pd.to_datetime(d, errors='coerce'))
Pablito

2019/07/19 08:40

ありがとうございます! 一旦いけたのですが、 dataをdate[['date_entry', 'yymm_', 'birthday']]のように 3つのカラムにするのではなく、 他のカラムも残しつつdataの中の'date_entry', 'yymm_', 'birthday'だけを 変換する方法はありますか?
magichan

2019/07/19 08:57 編集

であれば、普通にループ処理を行った方が簡単ですね for col in ['date_entry', 'yymm_', 'birthday']: __df[col] = pd.to_datetime(df[col], errors='coerce') ↑ 2行目頭の __ はスペースです。
guest

0

公式ドキュメントを読みましょう。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html#pandas.to_datetime
ちゃんと使用例も載っています。

arg : integer, float, string, datetime, list, tuple, 1-d array, Series

と書かれているように、 to_datetime では DataFrame は使えません。

追記:最新版では使えることになっていますが、エラーメッセージにあるように複数のカラムで year, month, day が指定されているときに使えるようです。詳しくはドキュメントの使用例を確認してください。

前回の質問で astype などを紹介されたと思うのですが、その類のものを探してみてはどうでしょうか?

投稿2019/07/19 05:35

編集2019/07/19 05:39
mather

総合スコア6753

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

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

Pablito

2019/07/19 06:49

ご回答ありがとうございます。 date =data[['date_entry', 'yymm', 'birthday']].astype(str) pd.to_datetime(date, format='%Y%m%d', errors='ignore') も試したのですが、 ValueError: to assemble mappings requires at least that [year, month, day] be specified: [day,month,year] is missing と出てしまいました。 ご指導ご鞭撻のほどよろしくお願いいたします。
mather

2019/07/19 08:39

ドキュメントにある例をじっくり読んで理解することから始めてください。 手当たり次第にコードを書いて動くか動かないか運試ししても何も理解できないと思いますよ。 ドキュメントにあるサンプルのデータフレームはこれですよ。 df = pd.DataFrame({'year': [2015, 2016], 'month': [2, 3], 'day': [4, 5]}) このような定義になっていない場合はそもそも pd.to_datetime を直接使うことはできません。 magichanさんのような方法でそれぞれの値に変換を適用するしか無いでしょう。 ところで、 'date_entry', 'yymm', 'birthday' のカラムの具体的な値がないので当てずっぽうの回答をするしかありませんね。各カラムについて具体的な値を質問に追記してください。
guest

0

自己解決

一つ一つに分けて実行してみたら意外とうまくいきました。

Python

1pd.to_datetime(df['yymm'], format='%Y%m') 2pd.to_datetime(df['date_entry'])

投稿2019/07/23 00:25

Pablito

総合スコア71

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問