2
Help us understand the problem. What are the problem?

posted at

空のデータフレームにデータを挿入する時にハマった話

はじめに

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

この方法でもデータを挿入することができた。

おわりに

少し考えれば簡単な話でも、正しい挙動や仕様を理解してないとミスをしてしまう事を忘れないためにも、記事を残していければと思う。
#こうしたミスを晒すのは恥ずかしい面もあるが…。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?