7
3

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-11-24

はじめに

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

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

おわりに

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

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3