はじめに
今回は、Pythonを使って、CSVファイルに「時間」の行を新たに追加する方法について学びました。
使用環境は以下のとおりです。
- OS: Windows 10 Pro
- バージョン: 20H2
背景
CSVファイルを読み込み、データを整形している過程で、
**「時間」**に関する行(カラム)が存在しないことに気づきました。
グラフ描画や可視化の際には「時間」軸があると非常に便利なため、
新たに時間のデータを生成し、CSVファイルに追加する処理を実装しました。
実際に行った手順
① 時間データを1秒刻みで作成
まず、range()
関数を使用して、0秒から1800秒まで、1秒刻みのリストを作成しました。
Time = [list(range(0, 1800, 1))]
ここで作られたリストは、0, 1, 2, …, 1799という1秒ごとのデータです。
② データフレームに変換
次に、先ほどのリストをpandas.DataFrame
に変換しました。
Time = pd.DataFrame(Time)
この段階では、1行に横並びでデータが並んでいる状態です。
③ 列と行を入れ替える
列方向ではなく、行方向に時間を並べるため、**transpose()**を使って行列を反転させました。
Time = Time.transpose()
これで、時間が縦に並ぶ形に整いました。
④ カラム名を「時間(s)」に設定
続いて、データフレームにカラム名を付けました。
Time_columns = ['時間(s)']
Time.columns = Time_columns
これにより、Timeデータフレームの列名が「時間(s)」に統一されました。
⑤ 元データと結合
最後に、読み込んだCSVファイル(ここでは変数df
に格納)と、作成したTime
データフレームを横方向(列方向)に結合しました。
df = pd.concat([df, Time], axis=1)
これで、元のデータに新たな「時間(s)」カラムが追加されました。
苦労した点
今回の作業で苦労した点は大きく2つありました。
- カラム名の付与
最初、時間のデータだけ作成して結合しようとしたところ、カラム名がないためエラーが発生しました。
「カラムを事前に付与しておく必要がある」と気づくのに時間がかかりました。 - 結合方法の選択
当初はmerge()
関数を使おうとしましたが、エラー pgsqlコピーする編集するTypeError: only integer scalar arrays can be converted to a scalar index
が発生しました。
このエラーは、merge()が主にキー結合用であり、単純な列追加には向かないため起こったものでした。
結局、concat()
を使うことで無事解決できました。
まとめ
range()
とpandas.DataFrame
を使えば、連番の時間データを簡単に作成できる。- 行列の向きを整えるには、
transpose()
が便利。 merge()
ではなく、concat(axis=1)
を使うことで、列を追加することができる。- データフレームに事前にカラム名を設定しておくと、エラーを防げる。
今回の作業を通じて、データフレーム操作の基本的な理解が一段と深まったと実感しました。
今後は、さらに効率的なデータ整形テクニックにも挑戦していきたいと思います。