はじめに
読み込むテキストファイルでは、先頭数行がデータの説明文となっており、データの区切りにはスペースが使用されています。このような形式のファイルをpandasで読み込む際の具体的な操作方法について解説します。
ファイル読み込みと区切り設定
データを正確に分割し、列名を設定するためのパラメータ設定方法です。
- 先頭の説明行をスキップ: skiprows=6
- スペースでデータを分割: sep='\s+' (タブとスペースの両方に対応)
- 列名の設定: header=0またはheader=None、namesで列名を指定
以下に実装例を示します:
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
file_path = r'data/EOP_data_1962-present.txt' # ファイルパス
# 先頭6行をスキップ、スペースとタブの両方に対応、列名を指定
earth_orientation_data = pd.read_csv(file_path, skiprows=6, sep='\\s+',
names=['年', '月', '日', '時', 'MJD', 'x(")',
'y(")', 'UT1-UTC(s)', 'dPsi(")',
'dEps(")', 'xrt(")', 'yrt(")',
'LOD(s)', 'x誤差', 'y誤差',
'UT1-UTC誤差', 'dPsi誤差', 'dEps誤差',
'xrt誤差', 'yrt誤差', 'LOD誤差'],
header=None)
earth_orientation_data # データ確認
列名の変更
列名を別途設定する方法です。read_csvで列名を指定せず、後から変更する場合の実装例:
# 列名を指定せずに読み込み
earth_data = pd.read_csv(file_path, skiprows=6, sep='\\s+', header=None)
# 列名を設定
earth_data.columns = ['年', '月', '日', '時刻', 'MJD', 'x極移動(")',
'y極移動(")', 'UT1-UTC(s)', 'dPsi(")',
'dEps(")', 'xrt(")', 'yrt(")',
'LOD(s)', 'x誤差', 'y誤差',
'UT1-UTC誤差', 'dPsi誤差', 'dEps誤差',
'xrt誤差', 'yrt誤差', 'LOD誤差']
年月日列を日付形式に変換
年、月、日の3列を1つの日付列(YYYY-MM-DD形式)に結合する方法です。
# 年月日列から日付オブジェクトを作成
date_series = pd.to_datetime(earth_data[["年", "月", "日"]])
# 新しい列として追加
earth_data['日付'] = date_series
earth_data
特定列のソート
指定した列でデータをソートする方法です。降順でソートし、上位10件を取得する例:
# x極移動列で降順ソートし、上位10件の特定列を表示
earth_data.sort_values('x極移動(")', ascending=False)[:10][['MJD', '日付', 'x極移動(")']]
グループ化と最大値の取得
特定の列でグループ化し、各グループの最大値を取得する方法です。年ごとの最大極移動を取得する例:
# 年ごとにグループ化し、各年の最大x極移動を取得
max_x_pole = earth_data[['MJD', 'x極移動(")', 'y極移動(")', 'UT1-UTC(s)', '日付']].loc[
earth_data.groupby(earth_data['日付'].dt.year)['x極移動(")'].idxmax().values
]
max_x_pole