[解決済み】2つの日付の間にあるDataFrameの行を選択する
質問
以下のように、csvからDataFrameを作成しています。
stock = pd.read_csv('data_in/' + filename + '.csv', skipinitialspace=True)
DataFrameには日付の列があります。指定された日付範囲内または指定された2つの日付値の間にある日付値を持つ行のみを含む新しいDataFrameを作成する(または既存のものを上書きする)方法はありますか?
解決方法は?
解決策は2つあります。
-
ブーリアン・マスクを使用し、次に
df.loc[mask]
-
日付カラムをDatetimeIndexとして設定し、次に
df[start_date : end_date]
ブーリアン・マスクを使用する :
確認する
df['date']
はSeriesで、dtypeは
datetime64[ns]
:
df['date'] = pd.to_datetime(df['date'])
ブーリアンマスクを作る。
start_date
と
end_date
は
datetime.datetime
s,
np.datetime64
s,
pd.Timestamp
や、日時を表す文字列も含まれます。
#greater than the start date and smaller than the end date
mask = (df['date'] > start_date) & (df['date'] <= end_date)
サブDataFrameを選択します。
df.loc[mask]
に再割り当てするか
df
df = df.loc[mask]
例えば
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.random((200,3)))
df['date'] = pd.date_range('2000-1-1', periods=200, freq='D')
mask = (df['date'] > '2000-6-1') & (df['date'] <= '2000-6-10')
print(df.loc[mask])
イールド
0 1 2 date
153 0.208875 0.727656 0.037787 2000-06-02
154 0.750800 0.776498 0.237716 2000-06-03
155 0.812008 0.127338 0.397240 2000-06-04
156 0.639937 0.207359 0.533527 2000-06-05
157 0.416998 0.845658 0.872826 2000-06-06
158 0.440069 0.338690 0.847545 2000-06-07
159 0.202354 0.624833 0.740254 2000-06-08
160 0.465746 0.080888 0.155452 2000-06-09
161 0.858232 0.190321 0.432574 2000-06-10
を使用することで DatetimeIndex :
日付で選択することが多い場合は、「日付で選択する」と設定した方が早いかもしれません。
date
カラムを最初にインデックスとして使用します。それから、日付で行を選択するために
df.loc[start_date:end_date]
.
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.random((200,3)))
df['date'] = pd.date_range('2000-1-1', periods=200, freq='D')
df = df.set_index(['date'])
print(df.loc['2000-6-1':'2000-6-10'])
イールド
0 1 2
date
2000-06-01 0.040457 0.326594 0.492136 # <- includes start_date
2000-06-02 0.279323 0.877446 0.464523
2000-06-03 0.328068 0.837669 0.608559
2000-06-04 0.107959 0.678297 0.517435
2000-06-05 0.131555 0.418380 0.025725
2000-06-06 0.999961 0.619517 0.206108
2000-06-07 0.129270 0.024533 0.154769
2000-06-08 0.441010 0.741781 0.470402
2000-06-09 0.682101 0.375660 0.009916
2000-06-10 0.754488 0.352293 0.339337
Pythonのリストインデックスが、例えば
seq[start:end]
には
start
ただし
end
これに対し、パンダは
df.loc[start_date : end_date]
には
どちらも
の終点がインデックスにある場合は結果に含まれます。どちらも
start_date
または
end_date
はインデックスに含まれている必要があります。
また、以下の点にも注意が必要です。
pd.read_csv
には
parse_dates
パラメータ
をパースするために使用することができます。
date
カラムを
datetime64
s. したがって、もしあなたが
parse_dates
を使用する必要はありません。
df['date'] = pd.to_datetime(df['date'])
.
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] Pandasのデータフレームから行を選択するために値のリストを使用する
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Python jiabaライブラリの使用方法について説明
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
任意波形を生成してtxtで保存するためのPython実装
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。