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

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

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

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

pandas

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

Q&A

解決済

2回答

2841閲覧

Pandasを使ったデータ抽出

essa

総合スコア81

Python

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

pandas

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

0グッド

1クリップ

投稿2018/12/18 04:34

編集2018/12/18 04:54

毎回お世話になっております。
pandasを使ったデータ抽出を教えてください。

日付を指定してデータを抽出したいです。

Python

1import pandas as pd 2 3input_file = ('./input.csv') 4 5df = pd.read_csv(input_file,parse_dates=['date']) 6df['date']['1999-03':'1999-05']

input.csv

datevalue
1999-011
1999-022
1999-033
1999-044
1999-055

1999-03から1999-04まで抽出するにはどうしたらいいでしょうか。
上記のコードでは

TypeError: cannot do slice indexing on <class 'pandas.core.indexes.range.RangeIndex'> with these indexers [1999-03] of <class 'str'

というエラーがおきました。

どうぞよろしくお願い致します。

----追記----

アウトプットを以下のようにしたいです。

output.csv

datevalue
1999-033
1999-044
1999-055

どうぞよろしくお願いします。

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

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

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

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

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

guest

回答2

0

magichanさんがもうご回答されていますが、私などは余り慣れてないので流れをわかりやすくするために分けてやっています。今回だと

python

1import pandas as pd 2 3input_file = ('./input.csv') 4 5df = pd.read_csv(input_file,parse_dates=['date']) 6 7df['date'] = pd.to_datetime(df['date']) 8df.set_index('date', inplace=True) 9print(df['1999-03':'1999-05'])

こんな感じです。to_datetimeは恐らくいらないですが、csv読み込むときに忘れていることがあるのと、datetime型に直しておかないといけないというのを意識的に行っています。

↓こちらのサイトなど参考になるかと思います。
https://note.nkmk.me/python-pandas-time-series-datetimeindex/

投稿2018/12/18 05:30

sietedm

総合スコア25

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

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

essa

2018/12/18 06:41

sietedm様 回答ありがとうございます。 参考にさせていただきます。
guest

0

ベストアンサー

データ範囲をSlice にて選択したいのであれば、一度set_index() で date列をIndexにした後に Sliceを行うとよいのではないでしょうか

Python

1import pandas as pd 2import io 3 4data = """ 5date,value 61999-01,1 71999-02,2 81999-03,3 91999-04,4 101999-05,5 11""" 12df = pd.read_csv(io.StringIO(data), parse_dates=['date']) 13 14 15ret = df.set_index('date')['1999/03':'1999/04'] 16# value 17#date 18#1999-03-01 3 19#1999-04-01 4

投稿2018/12/18 05:14

magichan

総合スコア15898

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

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

essa

2018/12/18 05:24

magichan様 回答ありがとうございます。 datetime型だとスライスが使えないのでしょうか?
magichan

2018/12/18 05:31

確か、スライスを使う為には DatetimeIndexにする必要があったかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問