Pandas DataFrameでタイムスタンプを生成・処理する方法
この記事では、pandasライブラリの組み込み機能を使って、さまざまなタイムスタンプを生成・処理する方法を解説します。さらに、numpyモジュールも活用して、タイムスタンプ生成に必要なデータの作成や加工を行います。
推奨環境:Jupyter Notebook
チュートリアルを始める前に、pandasとnumpyライブラリをインストールしておく必要があります。コードのテストと実行には、Jupyter Notebookが最適です。pandasをインストールするには、以下のコマンドを実行しましょう。
>>> pip install pandas
このコマンドを実行すると、必要な依存パッケージがすべて自動的にインストールされます。インストールが完了したら、変更を反映させるためにカーネルを再起動してください。
依存関係の準備が整ったら、pandasを「p」という別名でインポートします。
まず、DataFrameコンストラクタを呼び出し、開始日を指定して「4期間・3時間間隔」の日付範囲を持つデータフレームを初期化します。キー「time」を指定することで、生成されたデータを表示できます。
>>> pip install pandas
>>> import pandas as p
>>> data_struct = p.DataFrame()
>>> data_struct['time'] = p.date_range('14/7/2019', periods = 4, freq='3H')
>>> print(data_struct['time'])
0 2019-07-14 00:00:00
1 2019-07-14 03:00:00
2 2019-07-14 06:00:00
3 2019-07-14 09:00:00
Name: time, dtype: datetime64[ns]<data_struct>.dt.<feature name>という形式で、日時から各種特徴量(年・月・日など)を抽出できます。また、head()メソッドを使えば、データフレームの先頭行をまとめて確認できます。
>>> data_struct['year'] = data_struct['time'].dt.year
>>> data_struct.head(4)
time
0 2019-07-14 00:00:00 2019
1 2019-07-14 03:00:00 2019
2 2019-07-14 06:00:00 2019
3 2019-07-14 09:00:00 2019次に、numpyモジュールの.array()関数を使って時刻文字列を作成します。これらの文字列は、pandasライブラリの.to_datetime()メソッドによってDateTime型へ変換されます。format引数で書式を指定し、errors="coerce"を設定すれば、解析できない値があってもエラーではなくNaTとして処理されるため安全です。
>>> import numpy as n
>>> dt_timestring = n.array(['14-07-2019 07:26 AM', '13-07-2019 11:01 PM'])
>>> timestamps = [p.to_datetime(date, format ="%d-%m-%Y %I:%M %p", errors ="coerce") for date in dt_timestring]
>>> print(timestamps)
[Timestamp('2019-07-14 07:26:00'), Timestamp('2019-07-13 23:01:00')]続いて、.set_index()メソッドを使って、日付列をインデックスとして設定します。これにより、「date」フィールドが行ラベルとして先頭に表示され、日時を軸としたデータ操作がしやすくなります。
>>> data_struct1 = p.DataFrame()
>>> data_struct1['date'] = p.date_range('18/07/2019', periods = 5, freq ='2H')
>>> data_struct1= data_struct1.set_index(data_struct1['date'])
>>> print(data_struct1.head(5))
date
date
2019-07-18 00:00:00 2019-07-18 00:00:00
2019-07-18 02:00:00 2019-07-18 02:00:00
2019-07-18 04:00:00 2019-07-18 04:00:00
2019-07-18 06:00:00 2019-07-18 06:00:00
2019-07-18 08:00:00 2019-07-18 08:00:00データフレームから特定の条件に合うデータだけを抽出したい場合は、以下のように比較演算子を組み合わせた条件式を実装します。この例では、指定した日時より後のレコードのみを取り出しています。
>>> data_struct2 = p.DataFrame()
>>> data_struct2['date'] = p.date_range('17/07/2019', periods =3, freq ='4H')
>>> print(data_struct2.head(5))
date
0 2019-07-17 00:00:00
1 2019-07-17 04:00:00
2 2019-07-17 08:00:00
>>> inp = data_struct2[(data_struct2['date'] > '2019-07-17 04:00:00')]
>>> print(inp)
date
2 2019-07-17 08:00:00まとめ
この記事では、pandasを使ったタイムスタンプの生成と処理の基本を学びました。date_range()による日付範囲の作成、dtアクセサによる年などの特徴量抽出、to_datetime()による文字列からDateTimeへの変換、set_index()による日付インデックスの設定、そして条件式による特定データの抽出まで、時系列データを扱う上で実務に役立つテクニックを一通り確認しました。これらの操作をマスターすれば、ログ分析や時系列分析などのデータ前処理を効率的に行えるようになります。
-
【Python入門】MatplotlibでPandasデータフレームを可視化する方法(折れ線グラフ・円グラフ・ヒストグラム)
Pandasのデータフレーム(DataFrame)は、Matplotlibと組み合わせることで、折れ線グラフ・円グラフ・ヒストグラムなど、さまざまな種類のグラフを簡単に描画できます。まずは、PandasとMatplotlibのライブラリをインポートしましょう。import pandas as pd import matplotlib.pyplot as pltそれでは、実際に各グラフの描画方法を見ていきましょう。折れ線グラフの描き方サンプルコード以下は、2列のデータを持つデータフレームから折れ線グラフを作成するコードです。import pandas as pd import matplotli
-
Python Pandas入門:DataFrame内のNaN(欠損値)を0に置き換える方法
PandasのDataFrameに含まれるNaN(欠損値)を0に置き換えるには、fillna()メソッドを使用します。このメソッドは、データクレンジングや前処理の際に非常によく使われる基本的なテクニックです。例として、以下のようなCSVファイル(Microsoft Excelで開いた状態)があるとします。このデータには一部NaN値が含まれています。手順1:必要なライブラリをインポートするまず、Pandasライブラリをインポートします。import pandas as pd手順2:CSVファイルからDataFrameを読み込む次に、read_csv()メソッドを使ってCSVファイルのデータをDa