なろう分析記録

『小説家になろう』をふくめ『ネット小説投稿サイト』を分析する。コード置き場,主にPython,javascript,たまに創作。

【Python+Pandas】『既存の列』から『新しい列』をデータフレームに追加する方法

今回はPython+Pandasのデータフレーム内にある『既存の列』を元に『別の新しい列』を作成するサンプルコードをご紹介したいと思います。

f:id:karupoimou:20200229203812p:plain:w400
新しい列の追加

準備

pip

pip install pandas

テスト環境はwindows10 python3.7を使用しています

シンプルな例

f:id:karupoimou:20200229202037p:plain
テストデータ.xlsx

import pandas as pd

# テストデータの読み込み
df = pd.read_excel("テストデータ.xlsx", parse_dates=True)
df

f:id:karupoimou:20200229201814p:plain
テストデータ
まず今回は例として『価格』という名前の列がある、この様なデータフレームを用意しました。

新しい列の追加

このデータフレームに『税込み価格』を追加するには以下のコードを追加します

# 新しい列の追加
df["税込み価格"] = df["価格"] * 1.1

f:id:karupoimou:20200229202213p:plain
新しい列の追加

この様に既存の列を利用して新しい列を簡単にすることができます。

応用:datetime型列を元に『年・月・日・曜日・時刻・分』列を追加する

次はdatetime型として保存されている列を元に『年・月・日・曜日・時刻・分』列をなどを新たな列として追加してみたいと思います。

f:id:karupoimou:20200229202645p:plain
テストデータ.xlsx

import pandas as pd

# テストデータの読み込み
df = pd.read_excel("テストデータ.xlsx", parse_dates=True)

#df['date'] = pd.to_datetime(df['date'])

# サブグループの追加
df["year"] = df["date"].dt.year
df["month"] = df["date"].dt.month
df["weekday_name"] = df["date"].dt.day_name()
df["dayofweek"] = df["date"].dt.dayofweek
df["day"] = df["date"].dt.day
df["hour"] = df["date"].dt.hour
df["minute"] = df["date"].dt.minute
df["second"] = df["date"].dt.second

# 日本時間に変更する場合
# df["date"] = df["date"] + datetime.timedelta(hours=9)

df

f:id:karupoimou:20200229203812p:plain
結果

その他

AttributeError: 'DatetimeProperties' object has no attribute 'weekday_name'

『dt.weekday_name』でエラーが出る場合は

dt.day_name()

を使うとよいそうです。
stackoverflow.com

追記

AttributeError: Can only use .dt accessor with datetimelike values

上記エラーが出る場合は、date列を以下のように一度変換するとよいみたいです。

# date列の変換
df['date'] = pd.to_datetime(df['date'], errors='coerce')

# サブグループの追加
df["year"] = df["date"].dt.year
df["month"] = df["date"].dt.month
df["weekday_name"] = df["date"].dt.day_name()
df["dayofweek"] = df["date"].dt.dayofweek
df["day"] = df["date"].dt.day
df["hour"] = df["date"].dt.hour
df["minute"] = df["date"].dt.minute
df["second"] = df["date"].dt.second
参考ページ

qiita.com

note.nkmk.me