Pandasを用いたTXTファイルデータ読み込みの実践的処理方法

はじめに

読み込むテキストファイルでは、先頭数行がデータの説明文となっており、データの区切りにはスペースが使用されています。このような形式のファイルをpandasで読み込む際の具体的な操作方法について解説します。

ファイル読み込みと区切り設定

データを正確に分割し、列名を設定するためのパラメータ設定方法です。

  1. 先頭の説明行をスキップ: skiprows=6
  2. スペースでデータを分割: sep='\s+' (タブとスペースの両方に対応)
  3. 列名の設定: 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

タグ: Pandas データ処理 ファイル読み込み データ分析 Python

8月4日 06:57 投稿