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

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

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

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

Q&A

解決済

3回答

5341閲覧

日付が一致したものの抽出方法

abide

総合スコア5

Python

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

0グッド

1クリップ

投稿2021/07/30 06:13

編集2021/07/30 06:53

テーブルにある'date'の値と「本日の日付」が一致した行のみ抽出したいのですが、一致するものがあってもEmpty DataFrameとなってしまいます。

ソース:
import pandas as pd
import datetime as dt

today = dt.datetime.today()

df = pd.DataFrame(sample[['date','place','member']])
df['date'] = pd.to_datetime(df['date'])
※この時のdf['date']の形式は2020‐01‐01、typeはdatetime64[ns]

#df['date']の中身確認 df['date'] ※以下出力結果----- 0 2021-07-16 1 2021-07-16 2 2021-07-23 3 2021-07-23 4 2021-07-27 5 2021-07-27 6 2021-07-30 7 2021-07-30 Name: date, dtype:datetime64[ns]

df2 = (df[df['date'] == today])
print(df2)

→Empty DataFrame
Columns: ['date', 'place', 'member']
Index: []

データの中身に関しては、日付に一致するものを何件か入れてありますが、
== todayで抽出できるものがありません。

Pythonを始めたばかりなので、初歩的なミスだと思いますが、
どなたかお力添えいただけますと幸いです。

よろしくお願いいたします。

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

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

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

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

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

meg_

2021/07/30 06:19

dtとは何でしょうか?
abide

2021/07/30 06:23

すみません、import datetime as dtを記載しておりませんでした。
can110

2021/07/30 06:34

単にdf['date']に今日の日付が存在しないだけでは? 存在するのであれば、存在の確認方法およびその結果(表示)を追記ください。
abide

2021/07/30 06:54

本日2021‐07‐30は存在しているように見えます。 確認処理と出力結果を追記しましたのでご確認をお願いします
guest

回答3

0

ベストアンサー

df['date']dt.datetime.today()にはそれぞれ、日付だけでなく時刻のデータも入っています。
以下のように日付部分だけを比較するようにすればうまくいくのではないでしょうか。

python

1today = dt.date.today() 2df[df['date'].dt.date == today]

投稿2021/07/30 07:07

kirara0048

総合スコア1399

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

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

can110

2021/07/30 07:16

なるほど。こちらの回答のほうがまっとうですね。
abide

2021/08/02 07:02

ありがとうございます!とてもシンプルかつわかりやすいのでベストアンサーに選ばせていただきました。
guest

0

年、月、日を抽出条件にする場合です。

python

1result = df[(df['date'].dt.year == today.year) & (df['date'].dt.month == today.month) & (df['date'].dt.day == today.day)]

投稿2021/07/30 07:22

編集2021/07/30 07:24
meg_

総合スコア10577

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

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

abide

2021/08/02 07:01

ありがとうございます!バラバラに算出してつなげるやり方もあるのですね。勉強になりました。
guest

0

today = dt.datetime.today()だと現在時刻まで含まれるので一致しなくなります。
ではtoday = dt.date.today()でよいかというと、これも一致しません。ちょっと腑におちませんが。
結局、以下のようにして日付のみ有効なdatetime型の値を作成すると一致します。

Python

1import pandas as pd 2import datetime as dt 3 4today = dt.datetime.today() # 時刻も含むのでだめ 5print(today) # 2021-07-30 16:10:37.380231 6 7today = dt.date.today() # これもダメ date型だから? 8 9# 以下にて日付のみ有効なdatetime型の値を作成 10today = dt.datetime.today() # dt.date.today()でも可 11today = dt.datetime( today.year, today.month, today.day) 12 13df = pd.DataFrame({'date':['2021-07-16','2021-07-30'], 'place':[1,2], 'member':[3,4]}) 14df['date'] = pd.to_datetime(df['date']) 15df2 = (df[df['date'] == today]) 16print(df2) 17# date place member 18#1 2021-07-30 2 4

投稿2021/07/30 07:14

can110

総合スコア38233

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

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

abide

2021/08/02 07:02

ご丁寧な解説ありがとうございます!大変参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問