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

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

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

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

Q&A

解決済

1回答

269閲覧

時系列dfにて指定した期間のみ抽出したい。

Beginner20s

総合スコア14

Python

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

0グッド

0クリップ

投稿2022/08/18 06:49

編集2022/08/18 14:41

前提

df_weekという時系列のデータフレームを扱っております。
indexは年月日で1週間刻みdatetime型、カラムは毎週の平均気温を表しております。
df_week.shapeは(523, 1)です。

イメージ説明

実現したいこと

こちらのdfなのですが、indexの番号ではなく、具体的な「2019-09-01から2019-12-29まで。」抽出して新たなdfに格納したい場合はどのようにすればよろしいでしょうか?

試したこと

これじゃダメみたいでした。

df_week_test_pred2 = df_week_test_pred.query('2019-09-01 <= 年月日 < 2019-12-29')

エラー内容
イメージ説明

シンタックスエラーと記入されておりました。

解決致しました。

回答者様により解決する事が出来ました。

ret = df.query('"2019-09-01" <= 年月日 < "2019-12-29"')

私のコードの何が行けなかったのかというと、ダブルクォーテーションが無かった事です。

恥ずかしいです。

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

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

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

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

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

meg_

2022/08/18 08:10

> これじゃダメみたいでした。 どう「ダメみたい」だったのでしょうか?
Beginner20s

2022/08/18 14:29

修正依頼ありがとうございます。 申し訳ございません、エラー内容を記入するのを忘れていました。 技術者として恥ずかしいです。
meg_

2022/08/18 15:01

画像を見ると全角数字(あるいは余分なスペースがある)のように見えますね。
guest

回答1

0

ベストアンサー

日付部分を"で囲うと以下のように正常に動作します。

Python

1import pandas as pd 2 3date = pd.date_range('2010-01-03','2019-12-31', freq='W') 4df = pd.DataFrame({'年月日':date, 'val':range(len(date))}) 5df = df.set_index('年月日', drop=True) 6print(df) 7""" 8 val 9年月日 102010-01-03 0 112010-01-10 1 122010-01-17 2 132010-01-24 3 142010-01-31 4 15... ... 162019-12-01 517 172019-12-08 518 182019-12-15 519 192019-12-22 520 202019-12-29 521 21 22[522 rows x 1 columns] 23""" 24 25ret = df.query('"2019-09-01" <= 年月日 < "2019-12-29"') 26print(ret) 27""" 28 val 29年月日 302019-09-01 504 312019-09-08 505 322019-09-15 506 332019-09-22 507 342019-09-29 508 352019-10-06 509 362019-10-13 510 372019-10-20 511 382019-10-27 512 392019-11-03 513 402019-11-10 514 412019-11-17 515 422019-11-24 516 432019-12-01 517 442019-12-08 518 452019-12-15 519 462019-12-22 520 47"""

補足

pandas.DataFrame.queryに渡されたクエリー文字列はPythonのコード(式)として解釈されます。
「2019-09-01 <= 年月日 < 2019-12-29」において「2019-09-01」の部分が引き算の数式?として誤解釈されて提示エラーが発生しています。
それを回避するため「"」で囲んでリテラル文字列として正しく認識されるようにしています。

投稿2022/08/18 07:09

編集2022/08/19 00:22
can110

総合スコア38262

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

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

Beginner20s

2022/08/18 14:46

ありがとうございました。 ダブルクォーテーションが無かったのですね私のには。 私のコード、 ```ここに言語を入力 df_week_test_pred2 = df_week_test_pred.query('2019-09-01 <= 年月日 < 2019-12-29') ``` のエラー内容がシンタックスエラーだったので、結果論ですが、柔軟性や経験があればそこにたどり着く事も出来たかもしれません。精進致します。
can110

2022/08/19 00:24

通常のコードの構文エラーではなく、クエリー文字列自体がPythonのコード(式)として解釈された結果のエラーなので、初見だと分かりにくい問題かと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問