はじめに
Python の pandas.DataFrame の扱いについてちょっとミスをしてしまった事があったので、備忘録として記事に残しておく。
空のデータフレームへのデータ挿入
空のデータフレームのA列に 'aaa' というデータを挿入する場合を考える。
以下、A列とB列を持つ空のデータフレームを作成する。
import pandas as pd
test = pd.DataFrame(columns=['A', 'B'])
print(test)
Empty DataFrame
Columns: [A, B]
Index: []
ここへA列に aaa という文字列を挿入してみると…。
test['A'] = 'aaa'
print(test)
Empty DataFrame
Columns: [A, B]
Index: []
エラーは出ないが、結果、データフレームには値が挿入されない。
A B
0 aaa NaN
となる事を想定していた。以下の処理でデータフレームに値が入っているものだとしてエラーがでたので、この仕様に気が付くことができた。
結果、index の指定が無い状態だとデータの長さが決まっていないので、test['A'] = 'aaa'
の挿入方法ではデータが挿入されない、という事が分かった。
回避方法その1:index を指定した空のデータフレームを作る
そもそもindex を指定してやれば NaN が入ったデータフレームが作成されるので、この問題は起こらない。
test = pd.DataFrame(columns=['A', 'B'], index = [0])
print(test)
A B
0 NaN NaN
この状態で挿入する
test['A'] = 'aaa'
print(test)
A B
0 aaa NaN
これで値が挿入される。
回避方法その2:文字列ではなく pandas.Series を挿入する
index の情報を持つ、pandas.Series にしてから挿入してやることでも、これを回避できる。
test = pd.DataFrame(columns=['A', 'B'])
print(test)
Empty DataFrame
Columns: [A, B]
Index: []
'aaa'を挿入する際に pnadas.Series に変換する。
test['A'] = pd.Series('aaa')
print(test)
A B
0 aaa NaN
この方法でもデータを挿入することができた。
おわりに
少し考えれば簡単な話でも、正しい挙動や仕様を理解してないとミスをしてしまう事を忘れないためにも、記事を残していければと思う。
#こうしたミスを晒すのは恥ずかしい面もあるが…。