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

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

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

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

Python

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

Q&A

解決済

2回答

6268閲覧

DataFrameから期間を範囲指定して抽出したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2019/07/26 02:49

実行したいこと

DataFrameから期間を範囲指定して抽出したい

###データ内容

python

1df['購入日'] = pd.to_datetime(df['購入日'].astype('str'),errors='coerce') 2→上記コードでデータ型をdatetime64[ns]3 4 購入日 54 2017-01-21 65 2017-01-22 76 2017-01-22 87 2017-01-22 98 2017-01-22 109 2017-01-23 1110 2017-01-23 1211 2017-01-23 13dtype: datetime64[ns]

###試したこととその結果発生したエラー

python

1-1 2print(df['2017-01-22':'2017-01-23']) 3 4AttributeError: cannot do slice indexing on <class 'pandas.core.indexes.numeric.Int64Index'> with these indexers [2017-07-08] of <class 'str'> 5 6-2 7df[df['購入日'] > datetime(2017, 01, 22)] 8 9AttributeError: 'module' object is not callable 10 11-3 12df[df['購入日'] > df['購入日'].dt.datetime('2017-01-22')] 13 14AttributeError: 'DatetimeProperties' object has no attribute 'datetime'

どこに問題があるのか教えていただければ幸いです。
宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

既に解決しているようですが、一応

質問のように df['2017-01-22':'2017-01-23'] のような記法でスライスを実現したいのあれば、**'購入日'**列を Indexとして設定してください。

Indexとしないのであれば、通常通り不等号を使った条件文でおこいます。

Python

1import pandas as pd 2import numpy as np 3 4N=100 5df = pd.DataFrame({'購入日': pd.date_range('20170101', freq='8H', periods=N), 6 'データ': np.random.randint(0,10,N)}) 7 8# 購入日をIndexにした例 9print(df.set_index('購入日')['2017-01-22':'2017-01-23']) 10# データ 11#購入日 12#2017-01-22 00:00:00 3 13#2017-01-22 08:00:00 7 14#2017-01-22 16:00:00 7 15#2017-01-23 00:00:00 5 16#2017-01-23 08:00:00 2 17#2017-01-23 16:00:00 0 18 19# 不等号で実現する場合 20print(df[(pd.Timestamp('2017-01-22') <= df['購入日']) & (df['購入日'] < pd.Timestamp('2017-01-24'))]) 21# 購入日 データ 22#63 2017-01-22 00:00:00 3 23#64 2017-01-22 08:00:00 7 24#65 2017-01-22 16:00:00 7 25#66 2017-01-23 00:00:00 5 26#67 2017-01-23 08:00:00 2 27#68 2017-01-23 16:00:00 0

投稿2019/07/26 03:17

magichan

総合スコア15898

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

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

退会済みユーザー

退会済みユーザー

2019/07/26 03:32

magichan様 いつもありがとうございます。 Indexとする場合、しない場合で方法がことなるのですね。 初歩的な質問にも関わらず、 アドバイスいただき勉強になります。 本当にありがとうございます。 次回もよろしくお願いいたします。
guest

0

df[df['購入日'] > df['購入日'].dt.datetime('2017-01-22')]

投稿2019/07/26 03:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問