質問: 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) in () 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) in () 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'
回答: if 文をつかうのではなく、.loc[] を使って ``` det["案内2020/05/22"] = 0 det.loc[(det['Date'] >= dt.datetime(2020,5,15)) & (det['Date'] < dt.datetime(2020,5,22)), "案内2020/05/22"] = 1 ``` で良いと思います。