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

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

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

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

pandas

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

Q&A

解決済

1回答

1299閲覧

datetime型の範囲指定を条件に入れるとエラーがでる

onosan

総合スコア62

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2020/06/02 07:32

編集2020/06/02 07:59

Python初心者です。
datetime型で、2000年5月15日以降、5月22以内という条件のあるレコードを抽出しようとして、
下記のような文を作成しました。この時、det['Date']はdatetime型です。

det["案内2020/05/22"]=0
if(det[(det['Date'] >= dt.datetime(2020,5,15)) & (det['Date'] < dt.datetime(2020,5,22))]):
det["案内2020/05/22"]=1

こうすると、以下のようなエラーになります。

ValueError Traceback (most recent call last)
<ipython-input-71-389d570cb64d> in <module>()
1 det["案内2020/05/22"]=0
----> 2 if(det[(det['Date'] >= dt.datetime(2020,5,15)) and (det['Date'] < dt.datetime(2020,5,22))]):
3 det["案内2020/05/22"]=1

C:\Anaconda3\lib\site-packages\pandas\core\generic.py in nonzero(self)
1477 def nonzero(self):
1478 raise ValueError(
-> 1479 f"The truth value of a {type(self).name} is ambiguous. "
1480 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
1481 )

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

日づけの条件を重ねて&で結んでいくつか試したのですが、どうもうまくいきません。
どうすれば、条件にあったものにフラッグをつけることができるでしょうか。
何卒、よろしくお願い申し上げます。

ちなみに以下もしました。
det["案内2020/05/22"]=0
for i,v in enumerate(det['Date'].values):
if (v >= dt.datetime(2020,5,15)) and (v <= dt.datetime(2020,5,22)):
det["案内2020/05/22"][i]=1

この場合は、次のようなエラーが出ました。

TypeError Traceback (most recent call last)
<ipython-input-73-f11e924576fb> in <module>()
1 det["案内2020/05/22"]=0
2 for i,v in enumerate(det['Date'].values):
----> 3 if (v >= dt.datetime(2020,5,15)) and (v <= dt.datetime(2020,5,22)):
4 det["案内2020/05/22"][i]=1

TypeError: '>=' not supported between instances of 'int' and 'datetime.datetime'

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

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

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

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

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

guest

回答1

0

ベストアンサー

if 文をつかうのではなく、.loc[] を使って

Python

1det["案内2020/05/22"] = 0 2det.loc[(det['Date'] >= dt.datetime(2020,5,15)) & (det['Date'] < dt.datetime(2020,5,22)), "案内2020/05/22"] = 1

で良いと思います。

投稿2020/06/02 09:47

magichan

総合スコア15898

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

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

onosan

2020/06/02 09:57

早速助けていただきありがとうございます。こんな書き方があるのですね。すごく勉強になり、助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問