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

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

ただいまの
回答率

87.34%

期間指定したいが構文エラー

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 1,220

score 63

前提・実現したいこと

ある購買データの期間指定して、
データを抽出したいと考えています。
そこで実際に期間を指定しようとしたら
以下のエラーが起きました。

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

  File "<ipython-input-65-986ff6b89a33>", line 1
    group = (group['date'] >= dt.datetime(2017/5/29)) & (group['date'] =< dt.datetime(2019/6/2))
                                                                       ^
SyntaxError: invalid syntax

該当のソースコード

group = (group['date'] >= dt.datetime(2017/5/29)) & (group['date'] =< dt.datetime(2019/6/2))

試したこと

group = group[(group['date'] >= dt.datetime(2017/5/29)) & (group['date'] =< dt.datetime(2019/6/2))]
も試しましたが、全く同じエラーが起きます。

何卒宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+1

-group = (group['date'] >= dt.datetime(2017/5/29)) & (group['date'] =< dt.datetime(2019/6/2))
+group = (group['date'] >= dt.datetime(2017/5/29)) & (group['date'] <= dt.datetime(2019/6/2))

coco_bauerさんの回答へのコメントからすると、group['date']は文字列型(pandas上の表示はobject型)っぽいですね。pd.to_datetimeをしたのであれば、使い方が間違っています。

>>> import pandas as pd
>>> df = pd.DataFrame({"date":["2019/5/15", "2019/5/16"]})  # dfつくる
>>> pd.to_datetime(df["date"])  # これだめな例
0   2019-05-15
1   2019-05-16
Name: date, dtype: datetime64[ns]
>>> import datetime as dt
>>> df["date"] <= dt.datetime(2019, 5, 15)  # 失敗する
Traceback (most recent call last):
# 略
TypeError: unorderable types: str() <= datetime.datetime()
>>> df["date"]  # 確認する。文字列のまま
0    2019/5/15
1    2019/5/16
Name: date, dtype: object
>>> df["date"] = pd.to_datetime(df["date"])  # in-placeではないので再代入しないとだめ
>>> df["date"] <= dt.datetime(2019, 5, 15)  # 今度は大丈夫
0     True
1    False
Name: date, dtype: bool

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/24 10:38

    毎度ご回答ありがとうございます。
    アドバイスを参考に
    data['date'] = pd.to_datetime(data['date']
    data['date'] = (data['date'] >= dt.datetime(2017/5/29)) & (data['date'] <=dt.datetime(2019/6/2))
    とやってみましたが、TypeError: integer argument expected, got float
    というエラーが起きてしまいました。。。
    申し訳ございませんが、
    重ねてのアドバイス宜しくお願い致します。

    キャンセル

  • 2019/07/24 11:00

    coco_bauerさんの回答を読みましたか? あと私の回答もちゃんと見てください。取り急ぎこれだけ伝えます。

    キャンセル

  • 2019/07/24 12:03

    すいません、同じミスをしてしまいました。
    が、今度も他の質問で尋ねた内容と同じようなkey errorが起きてしまい、
    解決の糸口が見つかりません。

    キャンセル

+1

datetime オブジェクトのコンストラクターは以下の通りで、年、月、および日の引数は必須です。

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

質問に書かれたコードのような、日付(2017/5/29)だけを引数とするコンストラクタはないです。

 dt.datetime(2017/5/29)
の部分を
 dt.datetime(2017,5,29)
に修正。

同様に、dt.datetime(2019/6/2) の部分も修正してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/23 11:58

    ご回答ありがとうございます。
    アドバイス通りに修正してみたのですが、
    TypeError: '>=' not supported between instances of 'str' and 'datetime.datetime'
    というエラーが起きてしまいました。
    一応その前にpd.to_datetimeで
    Name: date, Length: 424699, dtype: datetime64[ns]
    のようにしてあるのですが、、、
    何か足りないところがありますか???

    キャンセル

+1

TAG に pandas がありますので、group はDataFrame ということで良いのですよね?

であれば
'date'列をIndex行に設定して

group = group.set_index('date', drop=False)['2017/5/29':'2019/6/2']


という手もあります。

正攻法としては coco_bauerさんの方法で良いかと思いますが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-4

& という演算子がなにかを調べてみましょうね

group = (group['date'] >= dt.datetime(2017/5/29)) && (group['date'] =< dt.datetime(2019/6/2))

これではどうでしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/23 11:46

    あ、論理積は&なのね。。
    group = (group['date'] >= dt.datetime(2017/5/29)) & (group['date'] <= dt.datetime(2019/6/2))
    だわ。。

    キャンセル

  • 2019/07/23 11:49

    実はそれも試したのですが、
    TypeError: integer argument expected, got float
    というのが出ました。
    すいません。
    中々うまくいきません。。。

    キャンセル

  • 2019/07/23 12:40

    それは書式が治ったので、その他のことで出てるんで、あとは他の回答を参考にして直しましょうw

    キャンセル

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

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る