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

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

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

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

Python

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

pandas

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

Q&A

解決済

3回答

347閲覧

日付の属性取得を関数化したいです。

rarara

総合スコア20

Python 3.x

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

Python

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

pandas

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

0グッド

0クリップ

投稿2022/07/05 05:51

■前提
A:データフレーム
B:カラム(時刻が入っている、例:2022-03-27 16:05:00)
B列の時刻データを、月、日、時間などに分解してAのデータフレームの列に追加させたいです。
そこで下記の様な処理を考えております。

A['month'] = A['B'].apply(lambda x:x.month) A['day'] = A['B'].apply(lambda x:x.day) A['hour'] = A['B'].apply(lambda x:x.hour)

■質問
上記の前提で、カラムの数と時刻データの分解の種類が多いため関数化しようと考えております。下記のようなコードを書いたのですが、x.timeにmonthやdayやhourを入れることができません。

def get_time(time): A[time] = A['B'].apply(lambda x:x.time)

ここの.timeを可変にしようとする場合、どのようなコードを書けばよいかわかりますでしょうか。初歩的な質問で恐縮ですがどうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

python

1import pandas as pd 2import numpy as np 3 4start = pd.to_datetime('2020-01-01') 5end = pd.to_datetime('2022-07-01') 6datetime = pd.to_datetime(np.random.randint(start.value//10**9, end.value//10**9, 20), unit='s') 7df = pd.DataFrame({'B': datetime}) 8 9# 10idx = pd.DatetimeIndex(df['B']) 11columns = ['month', 'day', 'hour'] 12df[columns] = pd.Series(idx.__getattribute__(i) for i in columns) 13print(df) 14 15# 16 B month day hour 170 2020-08-20 03:51:31 8 20 3 181 2022-02-26 09:39:25 2 26 9 192 2021-10-04 10:14:23 10 4 10 203 2020-07-27 04:15:36 7 27 4 214 2021-02-12 21:53:13 2 12 21 225 2022-02-22 05:35:34 2 22 5 236 2021-02-24 01:51:50 2 24 1 247 2022-05-14 17:32:23 5 14 17 258 2021-02-22 16:24:19 2 22 16 269 2022-04-13 13:39:17 4 13 13 2710 2022-06-09 02:00:30 6 9 2 2811 2021-01-05 10:41:33 1 5 10 2912 2021-04-20 19:38:06 4 20 19 3013 2020-07-19 22:48:44 7 19 22 3114 2020-12-29 00:28:29 12 29 0 3215 2021-09-21 01:22:37 9 21 1 3316 2020-06-16 10:29:34 6 16 10 3417 2021-08-16 02:45:33 8 16 2 3518 2020-09-27 17:47:12 9 27 17 3619 2021-06-25 09:54:11 6 25 9

投稿2022/07/05 06:24

編集2022/07/05 08:04
melian

総合スコア19618

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

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

0

ありがとうございます!!助かりました!

投稿2022/07/05 06:40

rarara

総合スコア20

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

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

0

ベストアンサー

getattrで名称(文字列)から属性値を取得することができます。

Python

1import pandas as pd 2 3A = pd.DataFrame({'st':['2022-07-01 01:02:03'], 'ed':['2022-07-02 02:03:04']}) 4A['st'] = pd.to_datetime(A['st']) 5A['ed'] = pd.to_datetime(A['ed']) 6 7def get_attr(sr, attr): 8 return sr.apply( lambda x: getattr(x, attr)) 9 10cols = [] 11for col in ['st','ed']: 12 for attr in ['month','day','hour']: 13 dt_col = f'{col}_{attr}' 14 A[dt_col] = get_attr( A[col], attr) 15 cols.append(dt_col) 16 17print(A[cols]) 18# st_month st_day st_hour ed_month ed_day ed_hour 19#0 7 1 1 7 2 2

投稿2022/07/05 06:10

編集2022/07/05 06:37
can110

総合スコア38233

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問