データフレームに任意の列を追加したい
自分のデータに任意の列を追加したい時がある。
今回は、任意の列を足す練習。
デモデータ
pandasを使って表を作成する
import pandas as pd
df = pd.DataFrame({'A': ['100', '100', '90', '80'],
'B': ['53', '48', '46', '49'],
'C': ['0.1', '1.2', '0.8', '0.9']},
index=['ONE', 'TWO', 'THREE','FORE'])
print(df)
これでできるコードがこちら。
A B C
ONE 100 53 0.1
TWO 100 48 1.2
THREE 90 46 0.8
FORE 80 49 0.9
dfという変数の中に上記の表が入った。
任意で列を追加する(同じ要素)
『D』という名前の列を作り、そこに1としたい場合は、以下。
df["D"]=1
print(df)
実行結果:
A B C D
ONE 100 53 0.1 1
TWO 100 48 1.2 1
THREE 90 46 0.8 1
FORE 80 49 0.9 1
存在しない列名を仕立て上げて、=で結ぶと出来ちゃう。
任意で列を追加する(作成したリストを追加)
追加したいリストがあれば、それをプラスすることも可能。この時、行数が同じにならないとエラーになるため注意。
df['E'] = [10, 15, 20,25]
print(df)
実行結果:
A B C D E
ONE 100 53 0.1 1 10
TWO 100 48 1.2 1 15
THREE 90 46 0.8 1 20
FORE 80 49 0.9 1 25
となる。
任意の列を追加する(計算した後を追加)
A列とB列を足した列を作りたい。但し、この時列名は全て『テキスト』なので
df['F'] = df['A'] + df['B']
print(df)
実行結果:
A B C D E F
ONE 100 53 0.1 1 10 10053
TWO 100 48 1.2 1 15 10048
THREE 90 46 0.8 1 20 9046
FORE 80 49 0.9 1 25 8049
あれ?
思ってたんと違う・・
そう、テキストの足し算なので、文字列が続くだけなのですよ。
思っていた結果と違う場合は、データの型を調べてみる
前記のように、思っていた結果と違う場合、『型』がマズイ場合が多いです。
df.dtypes
実行結果:
A object
B object
C object
D int64
E int64
F object
dtype: object
要するに、A~CとFはobject型、いわゆる文字列として認識、DとEは数字として認識しているとのこと。
型の変換にはastype()メソッドで変換
型の違いで計算できない場合は、astype()メソッドで変換します。文字列を数字にしたい場合は、astypeの後ろの()にintをいれてみます。
とりあえず、Aの列だけ変換させ、型をみてみましょう。
df['A']=df['A'].astype(int)
print(df.dtypes)
実行結果:
A int32
B object
C object
D int64
E int64
F object
dtype: object
よし!A列が変わりましたね。
同じく、Bも変換しておきます。
df['B']=df['B'].astype(int)
df.dtypes
実行結果:
A int32
B int32
C object
D int64
E int64
F object
dtype: object
AもBも変わりました。
ということで、ここで先ほどと同じA列とB列を足し、F列を作ります。
df['F'] = df['A'] + df['B']
print(df)
実行結果:
A B C D E F
ONE 100 53 0.1 1 10 153
TWO 100 48 1.2 1 15 148
THREE 90 46 0.8 1 20 136
FORE 80 49 0.9 1 25 129
ということで、このように変換後ならば問題なく足し算後の数値となります。
この記事が気に入ったらサポートをしてみませんか?