データフレームに任意の列を追加したい

自分のデータに任意の列を追加したい時がある。

今回は、任意の列を足す練習。

デモデータ

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

ということで、このように変換後ならば問題なく足し算後の数値となります。

この記事が気に入ったらサポートをしてみませんか?